2013-12-08 220 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 
相關問題