[英]Creating global event handlers using WithEvents for a GUI application in VB.NET
为了熟悉VB,我正在研究cli应用程序的前端,方法是从用户那里获取输入并将其作为命令行参数提供给所述后端应用程序。 这是到资源库的链接,以供任何参考。 另外,我对VB / GUI编程还很陌生,所以请原谅我必须错过的显而易见的事情。
关于我的思考过程的一些背景:
这就是我以为我会处理应用程序中的事件以构建我的args字符串的方式,如果我太冗长,请原谅,但是我认为最好在我告诉我之前尽可能地描述自己在做什么确切的问题是什么
问题:
我的问题出在(3)中,每当我尝试说说处理CtlInputFile类(或任何Class.PublicEventFromThatClass)的InFileSelected事件时,我都会收到错误消息Handles clause requires WithEvents variable defined in the containing type or one of its base types
。
到目前为止, MSDN文章已提供了帮助,但其中的问题要难一些。
我在课堂上错过了什么作为示例:
Public Class CtlInputFile
Public Event InFileSelected(ByVal inFileName As String)
Dim inFileName As String
' Proxy Init Module
Private Sub ctlInputFile_Initialize()
inFileName = String.Empty
End Sub
' Event handlers below
End Class
以及应该能够捕获CtlInputFile.InFileSelected(inFileName)
的全局事件侦听器
Public Class ArgBuilder
' Create getters and setters for all relevant vars in the project
' Capture events from all over the place
Dim inFileName As String
Private Sub ctlInputFile_FileSelected(ByVal inFilename As String) Handles _
ctlInput.InFileSelected
' Do something useful
End Sub
End Class
再次感谢!
如果看到诸如Handles Button1.Click
,则意味着存在一个定义为这样的对象
Public WithEvents Button1 As New Button
该代码通常位于表单的Designer文件中(您需要选择Display all Files来查看它)。 然后,您可以通过将Handles子句添加到具有正确声明的方法中来处理此事件。
在您的情况下,您将需要创建像这样的对象ctlInput
Public WithEvents ctlInput As New CtlInputFile
如果要使用Handles
子句。 另一种可能性是使用AddHandler
手动连接事件:
Addhandler ctlInput.InFileSelected, AddressOf ctlInputFile_FileSelected
即使没有WithEvents语句,此方法也有效。
如果您想拥有一个处理事件的中心位置,那么最后一种方法就是走。 您可以将事件处理代码放在模块中,或者在类中使用静态方法(共享):
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler Me.ResizeEnd, AddressOf EventHandlers.FormResized
End Sub
End Class
Public Class EventHandlers
Public Shared Sub FormResized(sender As Object, e As EventArgs)
MsgBox(sender.ToString & " was resized!")
End Sub
End Class
然后,您可以在初始化过程中连接事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.