繁体   English   中英

使用WithEvents为VB.NET中的GUI应用程序创建全局事件处理程序

[英]Creating global event handlers using WithEvents for a GUI application in VB.NET

为了熟悉VB,我正在研究cli应用程序的前端,方法是从用户那里获取输入并将其作为命令行参数提供给所述后端应用程序。 这是到资源库的链接,以供任何参考。 另外,我对VB / GUI编程还很陌生,所以请原谅我必须错过的显而易见的事情。

关于我的思考过程的一些背景:

这就是我以为我会处理应用程序中的事件以构建我的args字符串的方式,如果我太冗长,请原谅,但是我认为最好在我告诉我之前尽可能地描述自己在做什么确切的问题是什么

  1. GUI具有各种组件
  2. 每个组件都有相关事件触发的公共事件
  3. 一个类(ArgBuilder)在后台监听这些事件并更新相关变量
  4. “确定”按钮的处理程序实例化该类以获取命令,并使用已经可用的可执行文件创建一个新的后台进程。

问题:

我的问题出在(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM