怎么用委托在UserControl用户控件之间传值?
我想要实现上图所示的界面!每次点击左边的树上的第三层的节点的时候,都能把第三层节点相应的属性显示在右边的网格里。
分别用的是两个用户控件。一个用户控件里放的是TreeView,另外用户控件里用的是DataGridView,每次点击左侧树的时候就把相应的一个ID传给右侧的用户控件,在数据库里查了以后显示相应的属性。
我想在左边的用户空间里写一个委托事件Update,在右边的用户控件里写好订阅这个委托的事件setNodeID用来重新使DataGridView绑定新的数据源,每次当点左边击节点的时候,在After_selected()事件里,先new一个右边的用户控件的实例,然后调用委托事件。
但是现在不能实现啊,好像没反应啊??
下面是代码:
-------------------------------------------------------
左侧用户控件的:
private void nodeTree_AfterSelect(object sender, TreeViewEventArgs e)
{
/*这里得到了当前鼠标点击的节点的ID*/
UCDataGridView ucDataGridView = new UCDataGridView();//new一个用户控件的实例
this.Update += new EventHandler(ucDataGridView.setNodeID);//把右边用户控件的方法订阅委托事件
Notify(nodeID);
}
public delegate void EventHandler(int selectedNodeID);
public event EventHandler Update;//声明一个EventHandler类型的委托事件,名称为Update
private int nodeID;
public int NodeID
{
get { return nodeID; }
set { this.nodeID = value; }
}
public void Notify(int newNodeID)//当selectedNodeID改变时,调用此方法,这个方法调用了Update这个委托事件,其分别把当前ID的值通知给另外两个控件。
{
nodeID = newNodeID;
}
大家谁有更好的方法或者可以帮我找找问题的?紧急求救!
[最优解释]
UCDataGridView ucDataGridView = new UCDataGridView();//new一个用户控件的实例
你这里是new一个新的UserControl,根本就不是你右边那个控件,那又怎么可能更新呢
在左边的控件中定义一个引用右边控件的属性,然后在Form中把右边控件的引用传给它
[其他解释]
你的主程序应该编写一个事件处理函数,并且关联给控件1的TextBoxValueSubmitted事件,就好比你使用一个按钮而准备一个Click事件的处理函数那样。在这个处理函数中,你去调用控件2的TextBoxValue属性,设置正确的值。主程序不关心控件1的事件怎么触发,也不关心设置属性后控件2会做什么,它就是一个桥梁,把这些控件联系在一起。
-----------------------------------------------------------
我左边是一个UserControl1,里面放的是一个TreeView,右边是一个DataGridView,想要点击节点的时候右边的DataGridView能完成实时更新。我不清楚哪个是我的主程序了,这两个UserControl都放在Form1里面,现在我的主程序是Form1的构造函数还是整个程序的入口处Program.cs的Main方法??
我的这几行代码
UCTreeView ucTreeView = new UCTreeView();
UCDataGridView ucGridView = new UCDataGridView();
ucTreeView.Update += new UCTreeView.EventHandler(ucGridView.getNewSource);//订阅事件
在Form1的构造函数和Main方法里分别都试过,但是都不能完成,报错了,提示之前声明的Update代理没有实例化,证明订阅事件的这个方法根本没执行啊?
求解。我对winform窗口运行的机制了解的不好。谢谢了!
[其他解释]
这两个控件什么关系?如果关系紧密,建议做成一个控件。
[其他解释]