将方法作为参数传递给另一个方法
我正在开发项目在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
功能。
但我无法通过该方法作为参数。任何人都可以告诉我如何将方法作为参数传递给我的需求。
通过method
参数Add
和Remove
米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
}
请注意:这是DropDownList
在ASP.NET
,ComboBox
是WinForms
应用。
欲了解更多请参考:MSDN - DropDownList和MSDN - ListControl.SelectedIndexChanged Event
给予+1帮助我....感谢很多大声笑... – jeevacl 2013-03-18 13:16:37
@jeevacl请接受有用的答案.. :) – 2013-03-18 13:21:27
@jeevacl我已经在亚历山大和他给出了同样的答案,因为我已经回答.. :(这是不公平的游戏.. – 2013-03-19 06:27:14
我不确定你想要做什么。但为什么不是一个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;
}
谢谢大声笑....有相当难懂的字典..无论如何替代是有益的,并得到了解决方案...再次感谢 – jeevacl 2013-03-18 13:15:47
我也不能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);
但要注意,这可能是不是你的问题的最佳解决方案。
谢谢大声笑....这是我的问题的解决方案....非常感谢 – jeevacl 2013-03-18 13:12:27
看看'Func'和'Action' – 2013-03-18 11:12:23
检查这个答案http://stackoverflow.com/a/2082650/182344 – RredCat 2013-03-18 11:13:25
你可以传递委托作为参数。但我认为这不会解决您的问题。 – 2013-03-18 11:13:47