2013-07-03 2 views
0

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

У меня есть главный UserControl, который я добавил GroupBox и внутри этого GroupBox, добавленный элемент управления, как это:

главный UserControl

Me.GroupBox1.Controls.Add(Me.ctlWithDropDown) 

управления пользователя ctlWithDropDown

Me.Controls.Add(Me.ddList) 

Private Sub ddlList_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlList.SelectionChanged 
'some simple logic here to check if value changed   

End Sub 

Основной usercontrol наследует базовый класс, который имеет событие, чтобы установить значение true или false следующим образом:

Public Event SetFlag(ByVal value As Boolean) 

Я хочу знать, как я могу вызвать/установить это логическое значение из выпадающего списка, когда событие SelectionChanged является триггером. Любая помощь по этой проблеме?

+0

использование RaiseEvent в обработчике для selectedchanged – user1937198

ответ

0

проволоки обработчик событий для выпадающего списка:

AddHandler Me.ctlDropDown.SelectedIndexChanged, AddressOf ddlSelectedIndexChanged 
Me.GroupBox1.Controls.Add(Me.ctlDropDown) 

Убедитесь вы создаете ddlSelectedIndexChanged в вашем элементе управления и запускаете его событие SetFlag:

Protected Sub ddlSelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 

    RaiseEvent SetFlag(True) 

End Sub 
+0

Я обновил немного больше информации. Можете ли вы уточнить, на какой основной пользовательский контроль и на что наложить пользовательский контроль ctlWithDropDown. Я здесь утерян. – Calvin

+0

Ваши изменения немного смутили меня. Пожалуйста, объясните свою проблему и структуру кода немного лучше, и я отредактирую. – N0Alias

+0

это больше похоже на пользовательский контроль над пользовательским элементом управления. Первый пользовательский элемент управления содержит второй пользовательский элемент управления, который имеет выпадающий список. Первый пользовательский элемент управления наследует родителя, у которого есть событие SetFlag (boolean). Во втором пользовательском элементе управления, когда событие выпадающего списка «SelectionChanged» запущено, я хочу поднять событие SetFlag (boolean). Как мне это сделать? – Calvin

0

Я полагаю, что me.ctlDropDown - это то, что вы делаете программно? Если это так, то это должно работать на вас.

Public Sub Blah() 
    Dim ctlDropDown As New ComboBox 
    AddHandler ctlDropDown.SelectedIndexChanged, AddressOf IndexChangedHandler 
    Me.GroupBox1.Controls.Add(ctlDropDown) 
End Sub 

Private Sub IndexChangedHandler() 
    'Do whatever you need here. 
End Sub 

Однако, если это не создается во время выполнения должен сделать обработчик события, как:

Private Sub IndexChangedHandler() Handles Me.ctlDropdown.SelectedIndexChanged 
    'Do whatever you need here. 
End Sub