【问题标题】:Pass Global Variable to custom UserForm将全局变量传递给自定义用户窗体
【发布时间】:2014-01-08 23:16:29
【问题描述】:

以下代码以 .Count 变量结尾。我想获取该整数值并将其输出到自定义用户窗体中的一个句子中。如何在 Visual Studio 2012 设计器中执行此操作。这真的难倒我。谢谢!

Public Shared Property mailItem As Object
Public Shared Property BodyMatchResults As MatchCollection
Public Shared Property SubjectMatchResults As MatchCollection

Public Sub Application_ItemSend(ByVal Item As Object, _
    ByRef Cancel As Boolean) Handles Application.ItemSend

    Dim mailItem As Outlook.MailItem = TryCast(Item, Outlook.MailItem)

    If mailItem IsNot Nothing Then
        Dim attachments = mailItem.Attachments
        For Each attachment As Outlook.Attachment In attachments
            AttachmentQuery(attachment, mailItem, Cancel)
        Next attachment
    End If

    Dim BodyMatchResults As MatchCollection
    Dim SubjectMatchResults As MatchCollection
    Dim RegexObj As New Regex("\b(?!000)(?!666)(?!9)[0-9]{3}[ .-]?(?!00)[0-9]{2}[ .-]?(?!0000)[0-9]{4}\b")
    BodyMatchResults = RegexObj.Matches(mailItem.Body)
    SubjectMatchResults = RegexObj.Matches(mailItem.Subject)
    If BodyMatchResults.Count > 0 Or SubjectMatchResults.Count > 0 Then
        Cancel = True
        MessageBox.Show((BodyMatchResults.Count + SubjectMatchResults.Count))

        ' Access individual matches using AllMatchResults.Item[]
    Else
        Cancel = False
    End If

用户窗体非常基本,只有三个按钮和一个警告文本。我想在该文本中包含“您的电子邮件中有“BodyMatchResults.count”或“subjectmatchresults.count”。

【问题讨论】:

    标签: vba vb.net visual-studio-2010 outlook outlook-addin


    【解决方案1】:

    嗯,你显然是在用你的 .count 变量(为了论证,我假设它是整数类型)。希望你也有你的自定义用户表单,我们假设你已经调用了用户表单。

    在该用户窗体中添加以下代码:

    Private _count As Integer
    
    Public Sub New (ByVal count AS Integer)
      InitializeCompponent()
      _count = count
    End Sub
    

    然后您可以使用 _count 变量来显示您想要显示的信息。

    现在,当您调用 UserForm 时,您可以将 .count 变量传递给它,以便可以像这样在那里使用它:

    dim frm as New UserForm(NumberOfCountsIWantToDisplay)
    

    这个基本原则适用于大多数情况。

    编辑

    显然我没有正确阅读内容。您的问题专门询问了有关传递全局变量的问题。您应该能够从应用程序中的任何位置引用公共定义的全局变量(只要该变量具有应用程序范围)。但是,全局变量可能会带来更多麻烦,如果实际上您只是想将一个值从表单 a 传递到表单 b,那么我将使用我最初概述的方法,因为误读了主题标题,对此我深表歉意。

    【讨论】:

    • 这是很好的信息,感谢您抽出宝贵时间。我的问题是我已经设置了全局变量并有一个整数,我可以使用带有该变量的常规 MsgBox 格式显示该整数。但是,当我转到 VS2012 中的 UserForm.Designer 时,我不知道如何在该自定义用户窗体上创建一个变量,因为它并不能准确地向您显示该产品的代码。
    • 当您说您无法将用户窗体上的某个区域设为变量时,您究竟想要创建什么?如果我正确阅读了您的原始问题,则用户表单将显示一个包含全局变量的其他内容的句子。我是否正确理解了您的要求?
    • 设计器 GUI 中正确的自定义用户窗体。我相信我已经找到了方法,但它每次都将变量传递为零。我有一个“TotalPII as Integer”的全局变量,它封装了 ((BodyMatchResults.Count + SubjectMatchResults.Count)) Public Sub TextBox3_Display() Handles TextBox3.VisibleChanged Me.TextBox3.Text = (TotalPII) End Sub
    • 就像我说的,它在文本框中显示 TotalPII 变量,但它始终为零。
    • 我想到了两件事。首先尝试 TextBox3.text = TotalPII.ToString 看看是否有帮助。第二件事是您的“全局”变量实际上不是全局的(尽管如果不是,您应该会收到一个错误)。
    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多