【问题标题】:How to check if event has been fired in another form/class如何检查事件是否已在另一个表单/类中触发
【发布时间】:2014-03-10 12:09:36
【问题描述】:

所以尽可能简单地说,我有一个类可以从 sub 内部打开一个表单,如下所示:

Public Sub LoadExtension()

    'various code...

    Dim form as new frmMain
    frmMain.ShowDialog()

    'various code...

End Sub

在这个表单内我有两个按钮,一个会关闭表单,所以 LoadExtension() 子程序将继续。我想用来“退出”主类中的 LoadExtension() 子的另一个按钮,以便加载完全停止。表单模块里面的按钮事件是这样的:

Private Sub btnStopLoad_click(sender as object, e as eventargs) handles btnStopLoad.click
    'exit the LoadExtension sub somehow
End sub

实现这一目标的最简单方法是什么?我想我可以在 LoadExtension() 子中(在 .ShowDialog 之后)做这样的事情:

If frmMain.btnStopLoad.clicked then
    Exit Sub
End If

但它不会让我从类模块中做到这一点,显然我需要使用“引发事件”或其他什么?我对事件的工作方式不是很熟悉。有人可以为我提供一个简单的解决方案吗?我将不胜感激。我一直在网上寻找解决方案,但没有任何成功。感谢您的宝贵时间。

【问题讨论】:

    标签: vb.net winforms events visual-studio-2013


    【解决方案1】:

    您可以通过设置frmMainDialogResult 来实现。

    Public Class frmMain
        Inherits Form
    
        Private Sub _ButtonContinueClick(sender As Object, e As EventArgs) Handles ButtonContinue.Click
            Me.DialogResult = Windows.Forms.DialogResult.OK
            Me.Close()
        End Sub
    
        Private Sub ButtonExitClick(sender As Object, e As EventArgs) Handles ButtonExit.Click
            Me.DialogResult = Windows.Forms.DialogResult.Cancel
            Me.Close()
        End Sub
    
    End Class
    

    然后把LoadExtension方法改成这样:

    Public Sub LoadExtension()
    
        'various code...
    
        Using form As New frmMain()
            If (form.ShowDialog() <> Windows.Forms.DialogResult.OK) Then
                Exit Sub
            End If
        End Using
    
        'various code...
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      最简单的方法是使用 dialogresult 让 LoadExtension 函数知道按下了哪个按钮。

      【讨论】:

        【解决方案3】:

        DialogResult 是您正在寻找的 - 执行此操作的标准方法。

        但是,您可以订阅其他表单控件的事件,如下所示:

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
          Dim frm As New Form2
          AddHandler frm.Button1.Click, AddressOf OtherFormButton_Click
          frm.ShowDialog()
        End Sub
        
        Private Sub OtherFormButton_Click(sender As System.Object, e As System.EventArgs)
          MessageBox.Show("hello")
        End Sub
        

        这是假设 Form2 有一个名为 Button1 的按钮。

        【讨论】:

          猜你喜欢
          • 2013-07-31
          • 1970-01-01
          • 2014-04-01
          • 2011-05-05
          • 1970-01-01
          • 2013-08-12
          • 1970-01-01
          • 1970-01-01
          • 2011-04-17
          相关资源
          最近更新 更多