如何检查事件是否已在另一个表单/类中触发

时间:2014-03-10 12:09:36

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

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

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

但它不会让我从类模块那样做,显然我需要使用'加注事件'或什么?我对事件的运作方式不太熟悉。有人能给我一个简单的解决方案吗?我会非常感激的。我一直在网上寻找解决方案,但没有取得任何成功。谢谢你的时间。

3 个答案:

答案 0 :(得分:6)

您可以通过设置DialogResult的{​​{1}}来实现此目的。

frmMain

然后将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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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的按钮。