2013-12-08 121 views
1

这看起来很简单,但仍然没有解决问题的根源! 我在vb.net中插入了14-15个按钮。我组合了所有人的Click事件,并将该事件命名为“Digits”。 我想知道这15个按钮中哪个按钮被按下了。 这是它的外观:如何知道在vb.net中点击了哪个命令按钮?

Private Sub Digits(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Subtract.Click, Multiply.Click, Equal.Click, Divide.Click, Clear.Click, Button12.Click, Backspace.Click, B9.Click, B8.Click, B7.Click, B6.Click, B5.Click, 
    B4.Click, B3.Click, B2.Click, B1.Click, B0.Click, Addition.Click  

End Sub 

这看起来就像是在另一个活动!这无论如何可能知道哪个键被按下?

+1

最简单的方法是:**如果sender.Equals(B1)则... ** – MrPaulch

+0

谢谢!这和ABC一样简单! –

回答

2

您的发件人对象是生成Click事件的按钮,只是将其转换为按钮并相应地使用它。

Private Sub Digits(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Subtract.Click, Multiply.Click, Equal.Click, Divide.Click, Clear.Click, Button12.Click, Backspace.Click, B9.Click, B8.Click, B7.Click, B6.Click, B5.Click, B4.Click, B3.Click, B2.Click, B1.Click, B0.Click, Addition.Click 
    Dim b As Button = DirectCast(sender, Button) 
    'b will be the button that generated the click event 

End Sub 
1

如果您想在此基础上做一些功能按钮点击点击,您可以为每个处理您希望使用写if语句。

Private Sub Digits(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Subtract.Click, Multiply.Click, Equal.Click, Divide.Click, Clear.Click, Button12.Click, Backspace.Click, B9.Click, B8.Click, B7.Click, B6.Click, B5.Click, B4.Click, B3.Click, B2.Click, B1.Click, B0.Click, Addition.Click 
    If sender.name.tostring.contains("ButtonName") 
      'do something 
    else if sender......... 
    .... 
    End if 

End Sub 

通过使用contains选项,您无需键入整个句柄名称。这也可以让你选择类似的按钮同样的动作,如

if sender.name.tostring.contains("mult") then 
    'multiply 
if sender.name.tostring.contains("B") then 
    'all buttons that B1-B9 
相关问题