以编程方式点击按钮

5

我想编写一个程序来点击另一个按钮,当我单击它时。

例如,我有两个名为 Button1 Button2 的按钮,我想做的是在我单击 Button1 后立即点击 Button2 。 这可能吗?

5个回答

20

最好的实现取决于您要做什么。 Nadeem_MK 给出了一个有效的方法。您也可以:

  1. 使用 PerformClick() 方法触发 Button2_Click 事件:

    Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
        'do stuff
        Me.Button2.PerformClick()
    End Sub
    
  2. 将相同的处理程序附加到多个按钮:

  3. Private Sub Button1_Click(sender As Object, e As System.EventArgs) _
        Handles Button1.Click, Button2.Click
        'do stuff
    End Sub
    
  4. 使用与 Button1_Click(...) 方法相同的参数调用 Button2_Click 方法(如果 例如需要知道发送者):

  5. Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
        'do stuff
         Button2_Click(sender, e)
    End Sub
    

2
我喜欢这个 - PerformClick方法非常优雅。谢谢! - cardmagik
2
请注意,Me.Button2.PerformClick() 可以适用于任何附加到 Button2.Click 的事件处理程序(例如,另一个窗体可能使用 AddHandler 附加了此事件),而 Button2_Click(sender, e) 则调用特定的处理程序。 - Olivier Jacot-Descombes

15
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button2_Click(Sender, e)
End Sub

这段代码通过编程方式调用按钮点击事件


我从BackgroundWorker调用此事件,必须将事件从“Private”更改为“Friend”,然后再调用它,但它能正常工作。 - E_Blue
1
尽管这个答案被接受了,但我认为这不是问题的答案;这段代码不够健壮。它只是简单地调用函数Button2_Click(),而这个函数恰好是处理事件的函数。它并没有触发实际的事件。 - DarkTrick

5
这种情况的最佳实践是创建一个包含所有逻辑的方法,并在两个事件中调用该方法,而不是从一个事件调用另一个事件。
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

        LogicMethod()

End Sub

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

        LogicMethod()

End Sub

Private Sub LogicMethod()

     // All your logic goes here

End Sub

如果您需要 EventArgs (e) 的属性,您可以轻松通过参数将其传递给您的方法,这将避免如果发送方是不同类型而出现错误。但在您的情况下,这不会是问题,因为两个发送方都是 Button 类型。


由于它从未完成第一次点击,所以不要重复使用它来填充堆栈。 - jim

2

假设按钮1有一个名为的事件

Button1_Click(Sender, eventarg)

如果您想在Button2中调用它,则直接调用此函数。
Button1_Click(Nothing, Nothing)

0

在C#中,这个工作是有效的:D

protect void button1_Click(object sender, EventArgs e){
    button2_Click(button2, null);
}

protect void button2_Click(object sender, EventeArgs e){
    //some codes here
}

针对 VB.NET

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)   Handles Button1.Click
    Button2_Click(Sender, e)
End Sub

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)   Handles Button2.Click
    //some codes here
End Sub

button2_Click(button2, null); <-- 这是 C# 代码 - 在 VB.NET 中,Null 不同且无需 ; - Nadeem_MK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接