У меня есть форма с ~ 40 различными текстовыми полями. Недавно они попросили меня добавить функциональность, чтобы они могли запускать отчет, когда они нажимают кнопку ввода (вместо нажатия кнопки). Итак, я пытаюсь создать общий обработчик событий в своей форме, чтобы поймать событие, поднятое в различных элементах управления (вместо того, чтобы привязывать обработчик к управлению, который я создаю). У меня код работает, но событие не похоже на основную форму. Не могли бы вы указать, где я чего-то не хватает?Как пузырить события из класса элементов управления в родительскую форму
Public Class TextboxSelect
Inherits System.Windows.Forms.TextBox
Public Sub New()
AddHandler Enter, AddressOf selectText
AddHandler KeyDown, AddressOf raiseEnterEvent
End Sub
Public Event enterPressed As EventHandler
Private Sub selectText(sender As Object, e As EventArgs)
Dim text As TextboxSelect = CType(sender, TextboxSelect)
text.SelectionStart = 0
text.SelectionLength = text.Text.Length + 1
End Sub
Public Sub raiseEnterEvent(sender As Object, e As KeyEventArgs)
RaiseEvent enterPressed(Me, New EventArgs)
If (e.KeyCode = Keys.Enter) Then
RaiseEvent enterPressed(Me, New EventArgs)
End If
End Sub End Class
Главная форма:
Private Sub textboxEnterSearch(sender As Object, e As EventArgs) Handles this.enterPressed
MessageBox.Show("You hit enter in a textbox!")
End Sub
При отладке, я поднимала событие enterPressed, но мне кажется, что это событие не продувают до формы.
Если вы установите кнопку как 'AcceptButton' вашего' form', то при нажатии кнопки 'Enter' на любом из ваших' управления TextBox', код этой кнопки будет запущена. Используя эту функцию, кажется, вам не нужно писать какой-либо код для ввода ключа Enter, не так ли? –
Что такое 'this'? Вы должны добавить обработчик событий ко всем текстовым полям. –
@RezaAghaei теоретически, мне не нужен код в классе textboxSelect, если бы я это сделал, но разве он не запустил бы его, если бы пользователь нажал клавишу ввода, когда они не были в текстовом поле? – Rolan