2013-07-03 154 views
0

我正在使用vb.net和winform。我在過去的幾個小時裏遇到了一個我正在反對的問題。觸發另一個控件的事件

我有我添加了一個組框,並且組框的內部,加入這樣的控制的主用戶控件:

主要用戶控件

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 
相關問題