2010-08-04 1 views
1

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

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

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

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

+0

Где находится 'F5' здесь? – Zaz

+0

Это ключ к «Начать отладку». Я решил оживить, как я буду использовать термин «Runtime». –

+0

+1 для творчества заглавия, -1 для двусмысленности заголовка. haha – mattbasta

ответ

2

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

AddHandler NameOfFormObject.TypeOfAction, AddressOf HowToHandle 

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

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

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 
+0

Я думаю, что получаю что-то, потому что это знакомо с тем, что я читал на MSDN. Но в вашем коде у вас уже есть имя (например, ComboBox1). В моем коде я создам эти элементы управления в зависимости от того, сколько объектов «Люди» находятся в файле, который загружается пользователем, поэтому я не знаю, узнаю ли я его имя. Я знаю, что он будет следовать базовой структуре, такой как ComboBox1, ComboBox2 и т. Д. И я буду знать, сколько, но не до времени исполнения. –

+0

отредактирован, чтобы отразить ваши запросы =) Отправитель, на самом деле, comboBox, который отправил действие. Просто бросьте его в comboBox, и у вас будет то, что было положено на – AndyPerfect

+0

. Я действительно получаю что-то с этим! У меня есть моя форма из 10 ComboBoxes, и когда я выбираю индекс 0, STATIC TextBox1 становится включенным. Теперь мне нужно выяснить, как сделать это, выбрать соответствующее текстовое поле. –

1

Вы должны использовать событие ComboBox_SelectedIndexChanged(), чтобы зафиксировать, что элемент со списком был изменен. В этот момент вам нужно будет проверить, был ли выбран элемент со списком, и принять решение о том, следует ли включить TextBox или нет. Вот пример. Примечание. В этом примере предполагается, что «Живой» является первым элементом в вашем поле со списком в индексе 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

Да, и я понимаю, как это было бы возможно, если ComboBox был создан во время разработки, но в моем сценарии есть 10 человек, поэтому есть 10 строк элементов управления, созданных во время выполнения. Каждая строка элементов управления динамически создается, так как я могу справиться с «Ручками»? Извините, если я не был ясен в своем описании, но спасибо за вашу помощь. –

+0

Используйте свойство .Text, чтобы увидеть, равно ли оно «Живой». – Josaph

+0

Если ComboBox1.SelectedItem.Text = "Alive" – Josaph

0

Я полагаю, что, как вы будете иметь 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 
0

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

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 
Смежные вопросы