2013-03-18 214 views
2

我正在開發項目在widows c#.net中。在形式上,我有超過8個組合框控件。 當combobox1選擇如下改變時,我會加載數據到combobox2。將方法作爲參數傳遞給另一個方法

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    comboBox2.DataSource = DataTable; 
    comboBox2.DisplayMember="Name"; 
    comboBox2.ValueMember = "ID"; 
} 

Combobox3將被加載,當我選擇combobox2像下面。

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    comboBox3.DataSource = DataTable; 
    comboBox3.DisplayMember = "Age"; 
    comboBox3.ValueMember = "AgeCode"; 
} 

就像我會加載數據到其餘的組合框。
這裏的問題是錯誤會發生,如果我沒有檢查comboBox1_SelectedIndexChanged方法是否加載或不加載comboBox2。

我知道我們可以通過使用布爾變量來檢查,但可怕的是我們需要保持其「真/假」狀態來休息所有方法。

所以我想到在簡單的方法來解決這個問題的是,我將使用Add(combobox, Methodname)方法和Remove(combobox, method)方法來添加和刪除組合框SelectedIndexChanged事件comboBox_SelectedIndexChanged功能。

但我無法通過該方法作爲參數。任何人都可以告訴我如何將方法作爲參數傳遞給我的需求。

+0

看看'Func'和'Action' – 2013-03-18 11:12:23

+0

檢查這個答案http://stackoverflow.com/a/2082650/182344 – RredCat 2013-03-18 11:13:25

+0

你可以傳遞委託作爲參數。但我認爲這不會解決您的問題。 – 2013-03-18 11:13:47

回答

3

通過method參數AddRemove米ethod如果你的意思是comboBox1_SelectedIndexChanged和/或comboBox2_SelectedIndexChanged然後解決方案是

private void Add(ListControl dropDownList, EventHandler handlerMethodName) 
{ 
    dropDownList.OnSelectedIndexChanged += handlerMethodName; 
    //some logic here 
} 

private void Remove(ListControl dropDownList, EventHandler handlerMethodName) 
{ 
    dropDownList.OnSelectedIndexChanged -= handlerMethodName; 
    //some logic here 
} 

請注意:這是DropDownListASP.NETComboBoxWinForms應用。

欲瞭解更多請參考:MSDN - DropDownListMSDN - ListControl.SelectedIndexChanged Event

+0

給予+1幫助我....感謝很多大聲笑... – jeevacl 2013-03-18 13:16:37

+0

@jeevacl請接受有用的答案.. :) – 2013-03-18 13:21:27

+0

@jeevacl我已經在亞歷山大和他給出了同樣的答案,因爲我已經回答.. :(這是不公平的遊戲.. – 2013-03-19 06:27:14

1

我不確定你想要做什麼。但爲什麼不是一個ComboBox和方法的字典?

這樣的:

var dict = Dictionary<ComboBox, Action<object, EventArgs>>(); 

private void Add(ComboBox c, Action<object, EventArgs>e) { 
    dict[c] = e; 
} 

private void Remove(ComboBox c, Action<object, EventArgs> e) { 
    dict.Remove(c); 
} 

,並呼籲::

private void CallHandler(ComboBox c, EventArgs e) 
{ 
    dict[c](c, e); 
} 

或者

private void AddHandler(ComboBox c, Action<object, EventArgs> e) 
{ 
    c.SelectedIndexChanged += e; 
} 

private void RemoveHandler(ComboBox c, Action<object, EventArgs> e) 
{ 
    c.SelectedIndexChanged -= e; 
} 
+0

謝謝大聲笑....有相當難懂的字典..無論如何替代是有益的,並得到了解決方案...再次感謝 – jeevacl 2013-03-18 13:15:47

1

我也不能100%肯定那種你正在尋找解決方案,但我對你的需求的理解有以下幾種方法:

public void Add(DropDownList combo, EventHandler method) 
{ 
    combo.SelectedIndexChanged += method; 
} 

public void Remove(DropDownList combo, EventHandler method) 
{ 
    combo.SelectedIndexChanged -= method; 
} 

現在你可以定義自己的方法應該具有相同簽名EventHandler委託:

public void MyMethod1(object sender, EventArgs e) 
{} 

,你可以註冊並通過調用上述定義的方法註銷你的方法:

DropDownList lst = new DropDownList(); 
Add(lst, MyMethod1); 
Remove(lst, MyMethod1); 

但要注意,這可能是不是你的問題的最佳解決方案。

+0

謝謝大聲笑....這是我的問題的解決方案....非常感謝 – jeevacl 2013-03-18 13:12:27

相關問題