Новичок с событиями;Вызывающее действие после удара F5 - PullRequest
1 голос
/ 04 августа 2010

Так что да, я очень новичок в создании своих собственных событий. Я могу сделать основы, когда я помещаю элементы управления в форму, но это немного сложнее. У меня есть приложение, которое читает в .TSV и заполняет форму элементами управления, основываясь на количестве объектов, которые она «читает». Например, у меня есть файл, который содержит объекты из 10 человек, и мой код заполняет форму элементами управления для каждого человека. Легкие вещи!

Теперь допустим, что у меня есть ComboBox с элементами: «Живой», «Умерший», «Нерожденный». Прямо рядом с этим у меня есть текстовое поле для возраста. Первоначально, это текстовое поле не включено , потому что значение по умолчанию для ComboBox - «Unborn». Но скажем, когда пользователь выбирает «Alive», я хочу, чтобы это текстовое поле было включено, чтобы можно было ввести возраст.

Очевидно, что я спрашиваю это и название этого вопроса, я не знаю, как это сделать. Я не совсем понимаю события и учусь на примерах, но примеры из MSDN не совсем помогают.

Любая помощь (особенно удивительное пошаговое руководство) будет принята с благодарностью.

Ответы [ 4 ]

2 голосов
/ 04 августа 2010

Из того, что я собираю из комментариев, вы хотите добавить события в объект формы, который создается во время выполнения.Используйте команду AddHandler для объекта.Что-то с эффектом:

AddHandler NameOfFormObject.TypeOfAction, AddressOf HowToHandle

Private Sub HowToHandle(ByVal sender as System.Object, ByVal e As System.EventArgs)
   DropDownMenu.enabled = True
End Sub

Делая это таким образом, вы сможете изменять события объекта, созданного во время выполнения.В вашем случае звучит так, будто вы захотите использовать действие, рекомендованное Джозафом, и в итоге включите оба предложенных решения, например:

AddHandler ComboBox1.SelectedIndexChanged, AddressOf HowToHandle

Private Sub HowToHandle(ByVal sender as System.Object, ByVal e As System.EventArgs)

    If DirectCast(sender, ComboBox).SelectedIndex = 0 'Alive 
        DirectCast(DirectCast(sender, ComboBox).Tag, TextBox).enabled = True
    Else
        DirectCast(DirectCast(sender, ComboBox).Tag, TextBox).enabled = False
    End If
End Sub
1 голос
/ 04 августа 2010

Вы захотите использовать событие ComboBox_SelectedIndexChanged (), чтобы зафиксировать, что элемент комбинированного окна был изменен. На этом этапе вам нужно будет проверить, какой элемент комбинированного списка был выбран, и принять решение о том, должен ли TextBox быть включен или нет. Вот пример. Примечание. В этом примере предполагается, что «Alive» - это первый элемент в вашем выпадающем списке с индексом 0.


    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If ComboBox1.SelectedIndex = 0 Then 'Alive 
            TextBox1.Enabled = True
        Else
            TextBox1.Enabled = False
        End If
    End Sub

Динамически генерировать комбинированный список и добавлять обработчик.

Dim cmb as New ComboBox
AddHandler cmb.SelectedIndexChanged, AddressOf ComboBox1_SelectedIndexChanged
Me.Controls.Add(cmb)
0 голосов
/ 04 августа 2010

Вот как я закончил писать в конце.Я ценю всю помощь!Спасибо!

    If DirectCast(sender, ComboBox).SelectedIndex = 2 Then
        DirectCast(Me.Controls.Item(DirectCast(sender, ComboBox).Tag), TextBox).Enabled = True
    Else
        DirectCast(Me.Controls.Item(DirectCast(sender, ComboBox).Tag), TextBox).Enabled = False
    End If
0 голосов
/ 04 августа 2010

Полагаю, что поскольку у вас будет 10 комбинированных списков ... точно так же у вас будет 10 текстовых полей.

В этом случае ... как только вы присоедините и обработаете событие как AndyPerfect и Joseph... в этом методе вам потребуется код, чтобы узнать, какие из текстовых полей вам нужно включить / отключить.

Сначала вам нужно узнать, какой комбинированный список вызвал событие: это делается с помощью параметра «отправитель».ctype(sender, Combobox) для доступа к методам и свойствам ComboBox.

После того, как вы знаете, какой комбо, вам нужно активировать / деактивировать правильное текстовое поле.Для этого вам нужно добавить ссылку на TextBox в свойстве «TAG» Combobox в момент его создания.

Dim txt as new TextBox
Dim cmb as new ComboBox
cmb.Tag = txt

Затем ... вы просто используете:

ctype(ctype(sender, Combobox).Tag, TextBox).Enable = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...