【问题标题】:Pass value from an application event to a form (this form launch events for that appication) VB.net将值从应用程序事件传递到表单(该应用程序的此表单启动事件)VB.net
【发布时间】:2020-07-02 05:18:07
【问题描述】:

我正在使用表单来激活应用程序的事件,并且我想将此事件中的值传递到该表单上的文本框。但它不会将该值添加到其文本框中。在这种情况下请指导我。

'模块中的代码

Public Module InventorEvents

Private WithEvents m_onDocumentChangeEvent As Inventor.ApplicationEvents
Private WithEvents m_appEvents As Inventor.ApplicationEvents

Private g_inventorApplication As Inventor.Application
Private DocumentObject As Inventor.Document

Public Sub ActiveEvents()

    g_inventorApplication = Marshal.GetActiveObject("Inventor.Application")

    DocumentObject = g_inventorApplication.ActiveDocument

    m_onDocumentChangeEvent = g_inventorApplication.ApplicationEvents

    m_appEvents = g_inventorApplication.ApplicationEvents

End Sub

Private Sub m_onDocumentChangeEvent_OnDocumentChange(ByVal DocumentObject As Inventor.Document,
                                                     ByVal BeforeOrAfter As EventTimingEnum,
                                                     ByVal ReasonsForChange As CommandTypesEnum,
                                                     ByVal Context As NameValueMap,
                                                     ByRef HandlingCode As HandlingCodeEnum) Handles m_onDocumentChangeEvent.OnDocumentChange


    If BeforeOrAfter = EventTimingEnum.kAfter Then

        Call _formCommands.AddText($"OnActivateDocument : {DocumentObject.DisplayName}")

    End If

End Sub

End Module

'表单中的代码

Public Class _formCommands

Private Sub _formCommands_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Call InventorEvents.ActiveEvents()
End Sub

Public Sub AddText(str As String)
    _tboxStatus.AppendText(str + System.Environment.NewLine)
End Sub

End Class

【问题讨论】:

  • 文本是否以TextBox 结尾不应该是您确定这里发生的事情的方式。您是开发人员,而不是用户。表现得像一个人。使用调试器来观察您的代码的运行情况。您的模块中的事件处理程序是否已执行?
  • 如果引发事件并且执行了 AddText 调用,那么我猜问题在于您指的是模块中该表单类型的默认实例和您的实例重新实际查看的不是默认实例。

标签: .net vb.net forms winforms class


【解决方案1】:
Public Class Form1
Dim txtbox0 As TextBox = Nothing
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    txtbox0 = TextBox1
    With txtbox0
        .Text = "Hello"
    End With

    'When you need a handler you can write this or similar:
    AddHandler txtbox0.Click, AddressOf mytxtbox0_event_click
    'If you need o want to remove a handler you can write this or similar:
    'RemoveHandler txtbox0.Click, AddressOf mytxtbox0_event_click

End Sub

Private Sub mytxtbox0_event_click()
    txtbox0.Text = "See you!"
End Sub

End Class

您好,此代码适用于带有添加到 Form1 的文本框的 Windows 窗体应用程序,当您单击窗体的文本框时,它会更改 textbox1 的 .text 属性。我希望你能理解我写的代码,如果有任何家伙激增,请发表评论。非常感谢。和快乐的编码! :)

【讨论】:

    【解决方案2】:
    Public Class mainclass
    Dim txtbox0 As TextBox = Nothing
    
    Sub New()
        txtbox0 = New TextBox
        With txtbox0
            .Text = "Hello"
            '
            '
            '
        End With
        'When you need a handler you can write this or similar:
        AddHandler txtbox0.Click, AddressOf mytxtbox0_event_click
        'If you need o want to remove a handler you can write this or similar:
        RemoveHandler txtbox0.Click, AddressOf mytxtbox0_event_click
        '
        '
        '
    End Sub
    
    Private Sub mytxtbox0_event_click()
        txtbox0.Text = "See you!"
    End Sub
    

    结束类

    希望对你有帮助。享受编码并学到很多东西! :)

    【讨论】:

    • 先生您好!你能帮我解释一下吗,对不起,我才开始编码!
    • 您了解控件及其事件吗?如果是,则编写的代码显示如何到达我创建的事件,称为:mytxtbox0_event_click,当您单击声明为:txtbox0 的文本框时(此代码片段不完全运行,因为它需要更多代码将文本框添加到表单的行,然后您将能够看到它并单击它)。你想看完整的代码吗? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多