为了熟悉VB,我正在为cli应用程序的前端工作,方法是从用户那里获取输入并将其作为命令行参数提供给所述后端应用程序。这是repository的链接,供任何类型的参考。 另外,我对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 articles已经有所帮助,但是这个问题有点难以理解。
我将这节课作为一个例子说错过了什么:
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
再次,谢谢!
答案 0 :(得分:1)
如果您看到Handles Button1.Click
之类的内容,则表示有一个像这样定义的对象
Public WithEvents Button1 As New Button
此代码通常位于表单的Designer文件中(您需要选择“显示所有文件”才能看到它)。这允许您通过将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
然后在启动期间连接事件。