Нужна помощь с настройкой textchanged на всех текстовых полях...
У меня есть форма win с 43 текстовыми полями, и я хочу включить кнопку, если какое-либо из полей было изменено. следующий код-это то, что у меня есть. Это происходит в подпрограмме Form_Load. Я добавил окно сообщения, чтобы посмотреть, работает ли оно, но это не так. Что я упускаю или делаю неправильно?
Что я уже пробовал:
'Setup TextChanged flag for all textboxes For Each Control As Control In Me.Controls If Control.GetType = GetType(TextBox) Then Dim TextBox As TextBox = DirectCast(Control, TextBox) AddHandler TextBox.TextChanged, AddressOf TextBoxTextChanged_Handler MsgBox(TextBox.Name & " was changed.") 'Added this message box to see if the sub is working End If Next
У меня есть следующее но оно не срабатывает:
' TextChangedEventHandler delegate method. Sub TextBoxTextChanged_Handler(ByVal sender As Object, ByVal e As EventArgs) Dim TextBox As TextBox = DirectCast(sender, TextBox) MsgBox(TextBox.Name & " was changed.") End Sub
Ralf Meier
Я не совсем уверен, но предполагаю, что в конце Form_Load элементы управления формы являются экземплярами - не раньше. Я бы попробовал сделать это с другим событием из формы.
Еще один момент : для меня всегда странно давать переменной то же имя, что и тип, на который она ссылается (для каждого элемента управления как элемента управления ... - лучше : для каждого c в качестве контроля)
Richard Deeming
Для Windows Forms элементы управления будут существовать сразу же после создания конструктора. InitializeComponent
метод возвращает значение. Это обычно вызывается из конструктора, поэтому элементы управления будут существовать задолго до того, как Load
пожары событий. :)