在 .net 示例中引发事件

Car*_*doc 5 .net vb.net events event-handling

我正在尝试创建一个在 vb.net 中引发事件的基本示例,我希望通过彻底研究它可以升级我的系统从串行端口接收数据的方式。

现在我有一个系统通过计时器从串行端口接收传入数据,问题是系统中的某些事件与我的计时器发生冲突。因此,我计划更改从串行端口接收数据的方式,而不是我想使用 vb.net raiseevent 的计时器。

不幸的是,我找不到关于如何使用此事件的简单示例,通过彻底搜索,我看到了MSDN关于此主题帖子,它就在这里。那么,我该如何使用这个例子呢?我试过在下面这样使用它

Public Event TimeExpired(ByVal Status As String)
Public Sub RaiseTimeExpiredEvent()
    RaiseEvent TimeExpired("Your time has run out")
    MessageBox.Show(TimeExpired())
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    RaiseTimeExpiredEvent()
End Sub
Run Code Online (Sandbox Code Playgroud)

它不起作用,错误是

错误 1 ​​'Public Event TimeExpired(Status As String)' 是一个事件,不能直接调用。使用“RaiseEvent”语句引发事件。C:\Users\Cary\Desktop\Projects\Testing\Testing\Testing\Form1.vb 5 25 测试

由于那个错误,我试图这样做

Class Form1
Public Event TimeExpired(ByVal Status As String)
Public Sub RaiseTimeExpiredEvent()
    RaiseEvent TimeExpired("Your time has run out")
    MessageBox.Show(TimeExpired())

End Sub


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    RaiseEvent TimeExpired()
End Sub
Run Code Online (Sandbox Code Playgroud)

结束类

但错误指出

未为“公共事件 TimeExpired(Status As String)”的参数“Status”指定错误 2 参数。C:\Users\Cary\Desktop\Projects\Testing\Testing\Testing\Form1.vb 11 9 测试

Dra*_*g29 5

你在使用 Visual Studio 吗?如果是,您可以尝试显示错误列表。为此,单击查看和错误列表。

Class Form1

    Public Event TimeExpired(Status As String)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        RaiseEvent TimeExpired("Your time has run out")
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

要处理该事件,您可以添加以下内容:

Private Sub HandleTimeExpired(Status As String) Handles Me.TimeExpired
    MsgBox(Status)
End Sub
Run Code Online (Sandbox Code Playgroud)

这是完整的代码:

Class Form1

    Public Event TimeExpired(Status As String)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        RaiseEvent TimeExpired("Your time has run out")
    End Sub

    Public Sub OnTimeExpired(Status As String) Handles Me.TimeExpired
        MsgBox(Status)
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

编辑 :

如果您想在模块中移动引发事件,则不能。您必须将其添加到类中。请参阅此链接

Class1 示例(您应该将其重命名...):

Public Class Class1

    Private Event TimeExpired(Status As String)

    Public Sub OnTimeExpired(Status As String)
        RaiseEvent TimeExpired(Status)
    End Sub

    Private Sub HandleTimeExpired(Status As String) Handles Me.TimeExpired
       MsgBox(Status)
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

要使用它,您必须在 Form1 中声明它 WithEvents :

Public Class Form1

    Dim WithEvents Class1 As New Class1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Class1.OnTimeExpired("Your time has run out")
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

  • 你的回答对我来说似乎很容易理解。这很棒而且更好! (2认同)