在另一个类中处理来自Control的事件

时间:2017-06-19 08:59:22

标签: vb.net class events event-handling

我想在另一个类中触发一个事件。 我的问题是我不知道如何制作它。

我试图在我的表单中使用Inherits语句并将其类名添加到其中,并且它可以正常工作:

Public Class Frm_Main_Copy

    Inherits ToolStripMenuApp 
     'I have a ToolStripMenu that has declared before on my class and it sounds like this:
     'Public Shared WithEvents Cat000x86_64App As ToolStripMenuItem
    ...
    Private Sub IsClicked(ByVal sender As Object, ByVal e As EventArgs) Handles Cat000x86_64App.Click

    End Sub

End Class

但设计师表格搞砸了(返回致命错误),我应该删除Inherits语句和其他语句。

尝试充当表单设计器脚本(尝试将此代码放到我的班级中):

Friend WithEvents BlahBlah As RadioButton 'For example

它没有用,

为我的班级声明一个变量而且它也没有工作

在互联网上搜索,似乎比我想象的更复杂......

任何人都可以提供帮助?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

表单不是表单,除非它直接或间接地继承Form类。您不能继承任何本身不是表单的类型,并期望您的类型成为表单。使用该代码,如果ToolStripMenuApp不是表单,那么Frm_Main_Copy也不是表单,因此没有表单设计器。

如果您实际说的是,您有一个ToolStripMenuApp的实例,其中包含TooStripMenuItem您希望在Click中处理的Frm_Main_Copy事件然后第一步是不要将Cat000x86_64App声明为SharedFrm_Main_Copy需要声明一个能够处理该事件的方法:

Private Sub IsClicked(ByVal sender As Object, ByVal e As EventArgs)
    '...
End Sub

请注意,没有Handles子句,因为您正在处理其事件的那个类中没有WithEvents变量。

接下来,Frm_Main_Copy必须有权访问ToolStripMenuApp的相应实例。根据所提供的信息,我们不可能说出如何最好地做到这一点,但它可能就像这样简单:

Dim tsma As New ToolStripMenuApp

然后将您的方法注册为适当事件的处理程序:

AddHandler tsma.Cat000x86_64App.Click, AddressOf IsClicked

如果您使用AddHandler,请确保在完成任一对象后使用RemoveHandler。我建议你根据这些信息做一些阅读。