在VB.net窗體中,我有20個按鈕。它們是從btnLoc1〜btnLoc20命名的。我不想編碼每個按鈕點擊事件。循環按鈕來檢查哪個被點擊
如何遍歷每個按鈕來檢查哪個被點擊?
我是否需要實現計時器滴答聲來聽按鈕點擊事件?
在VB.net窗體中,我有20個按鈕。它們是從btnLoc1〜btnLoc20命名的。我不想編碼每個按鈕點擊事件。循環按鈕來檢查哪個被點擊
如何遍歷每個按鈕來檢查哪個被點擊?
我是否需要實現計時器滴答聲來聽按鈕點擊事件?
如果按鈕被點擊時發現 - eventhandler是最好的選擇。
但是你可以爲所有的按鈕
Private Sub Button_Click(sender As Object, e As EventArgs)
Dim button As Button = DirectCast(sender, Button)
MessageBox($"Button '{button.Name}' was clicked")
End Sub
然後在構造函數中只有一個事件處理
Public Sub New()
InitializeComponennts()
AddHandler Button1.Click, AddressOf Me.Button_Click
AddHandler Button2.Click, AddressOf Me.Button_Click
AddHandler Button3.Click, AddressOf Me.Button_Click
' and so on
End Sub
如果你想獲得每個鍵有多少點擊,只需創建字典,並添加點擊量的信息在一個事件處理程序中
Private ButtonsClickAmount As New Dictionary(Of String, Integer)()
Private Sub Button_Click(sender As Object, e As EventArgs)
Dim button As Button = DirectCast(sender, Button)
If ButtonsClickAmount.ContainKey(button.Name) = True Then
ButtonsClickAmount(button.Name) += 1
Else
ButtonsClickAmount.Add(button.Name, 1)
End If
End Sub
您可以爲所有Buttons
創建單個事件處理程序。選擇設計器中的所有按鈕,打開「屬性」窗口,單擊「事件」按鈕,然後雙擊「Click
」事件。這將生成一個Click
事件處理程序,就像雙擊設計器中的Button
一樣,除了這個將在Handles
子句中有多個項目。然後,您可以使用sender
參數訪問被點擊的Button
,例如
Private Sub Buttons_Click(sender As Object, e As EventArgs) Handles Button1.Click,
Button2.Click,
Button3.Click
Dim btn = DirectCast(sender, Button)
'Use btn here.
End Sub
接下來的問題是,你想用那Button
做什麼?如果你想爲每個Button
做一些不同的事情,那麼你真的應該創建單獨的事件處理程序。或者,您可能有一個數據列表,並且您想要使用該列表中對應於被點擊的Button
的項目。有很多方法可以做到這一點。一種是將數據放在Button
本身的Tag
屬性中,並從那裏檢索它。另一個是使用併發索引,例如
Dim buttons = Controls.OfType(Of Button)().ToArray()
Dim data = {"First", "Second", "Third"}
MessageBox.Show(data(buttons.IndexOf(btn)))
顯然你需要確保Button
陣列和數據陣列排隊。
如果每個按鈕都有自己的邏輯 - 每個按鈕的自己的處理程序都是更清晰且更容易維護的出價,那麼「索引「,」映射「方法 – Fabio
@Fabio,是的,我已經在我的回答中說過,如果您想爲每個」按鈕「做不同的事情,應該使用單獨的事件處理程序。儘管我的第二個代碼片段沒有爲每個「Button」演示不同的邏輯。它爲每個'Button'演示不同的數據,所有的邏輯都是相同的。在這種情況下,使用併發數組是一種優越的方法,因爲它遵循DRY原則。 – jmcilhinney
_我不想編碼每個按鈕單擊event_ - 你需要。您可以爲所有按鈕創建一個按鈕單擊事件處理程序 – Fabio
Private Sub Buttons_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles Button1.Click,Button2.Click,_ Button3.Click,Button4.Click,Button5.Click, Button6.Click,Button7.Click,Button8.Click'等等...... End Sub –