【问题标题】:Raising event in UserControl Class在 UserControl 类中引发事件
【发布时间】:2020-01-24 11:49:35
【问题描述】:

所以,我有一个 UserControl,我有一个按钮点击句柄:

Private Sub Forward_Click(sender As Object, e As EventArgs) Handles Forward.Click

然后点击第二个按钮:

Private Sub back_Click(sender As Object, e As EventArgs) Handles Back.Click

我有另一个句柄用于在 userControl 上单击鼠标:

Private Sub UserControl_MouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick

根据条件,我想从这个子函数中引发一个按钮点击事件。所有这些句柄都在同一个 UserControl 类中。它将如何实现。

【问题讨论】:

  • 您似乎不想引发事件,而是要执行Button.Click 处理程序中的代码。
  • @Jimi,你是对的,但我已经编辑了这个问题,强调两个Button.Click 事件之一必须从me.MouseClick 事件引发。
  • 您不需要引发事件,您需要运行该代码。将代码移至私有方法 (Sub) 并从两个处理程序中调用该方法。
  • @Jimi,它可以实现但会导致代码重复多次,这不是一个好的编码习惯。
  • ???您只有一种方法,由需要它的其他代码调用。没有重复。您尝试做的不是良好做法

标签: vb.net event-handling user-controls


【解决方案1】:

您可以通过将 e.Button 与 MouseButton.Left 或 MouseButton.Right 进行比较来检查单击了哪个按钮。这将确保您仅在单击鼠标左键时才运行代码。

    If e.Button = MouseButtons.Left Then
        'Any user code here
    End If

您可以像调用任何其他方法一样使用其方法名称来调用另一个事件处理程序。

Forward_Click(Me, Nothing)

将它们放在一起看起来像这样。

    Private Sub UserControl1_MouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick
    If e.Button = MouseButtons.Left Then
        Forward_Click(Me, Nothing)
    ElseIf e.Button = MouseButtons.Right Then
        Back_Click(Me, Nothing)
    End If
End Sub

您的情况可能会有所不同,因为这只是一个示例。它也可能不是“最佳实践”,但我不是在这里争论什么是“最佳实践”。这是回答您的问题的工作示例。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多