Метод 1 :
Используя конструктор, назначьте одно событие Click всем вашим кнопкам, затем используйте объект sender
, приведя его к кнопке или элементу управления:
Private Sub MyKeys_Click(sender As Object, e As EventArgs) Handles MyKeysA.Click, MyKeysB.Click, (...)
TextBox1.AppendText(CType(sender, Button).Text)
End Sub
Но к обработчику финальных событий будет прикреплено множество ссылок на кнопки.
Не красавица.
Метод 2 :
Создайте обработчик событий в коде и назначьте его всем вашим кнопкам с помощью classic делегата с
AddHandler [Event], AddressOf [HandlerMethodName]
Предположим, что ваши кнопки имеют общее частичное имя, здесь "btnKey"
.
Вы также можете использовать свойство Tag
и назначить ему определенные значения для кнопок клавиш.
Затем вы должны написать Where()
: b.Tag.ToString().Contains("[Some Common Identifier]")
.
Обратите внимание, что значение свойства Tag
имеет тип object
, поэтому
Contains()
это просто общий пример. Это может оценить
Integer
введите или что-нибудь еще.
Примечание 1: Чтобы назначить общий идентификатор всем кнопкам клавиш, вы можете использовать конструктор * 1044: выберите все кнопки и используйте Properties Window
, чтобы изменить свойство Tag
все выбранные кнопки.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Each btn As Button In Me.Controls.OfType(Of Button).Where(Function(b) b.Name.Contains("btnKey"))
AddHandler btn.Click, AddressOf Me.MyKeys_Click
Next
End Sub
Private Sub MyKeys_Click(sender As Object, e As EventArgs)
TextBox1.AppendText(DirectCast(sender, Control).Text)
End Sub
Примечание 2 :
Как предложил Эндрю Мортон в комментариях, здесь приведение приведено с использованием оператора DirectCast () . Поскольку sender
равно a Button
, а также Button
является производным от Control
, вы можете использовать легкий DirectCast()
до см. sender
как Button
или Control
(так как Button
происходит от Control
, а свойство Text
наследуется от Control
) и имеет доступ к его свойству .Text
.
Из документов:
[DirectCast()
] (...) может обеспечить несколько лучшую производительность, чем CType
при преобразовании в тип данных Object и из него.
Я ухожу CType () в первом примере в качестве визуального помощника.
Разница между DirectCast () и CType () в VB.NET
Метод 3 :
Создайте обработчик событий в коде и назначьте его всем вашим кнопкам, используя лямбду в качестве делегата метода:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Each btn As Button In Me.Controls.OfType(Of Button).Where(Function(b) b.Name.Contains("btnKey"))
AddHandler btn.Click, Sub() TextBox1.AppendText(btn.Text)
Next
End Sub