使用事件属性在主界面与用户组件之间传递事件。
一、应用场景:
主界面中嵌套一个用户控制,然后用户控制中有个事件需要触发,但触发后的操作则是操作主界面里面的东西。这就需要把主界面的方法传递给子界面,绑定在子界面的那个控件事件上。
好了,我们举例现在有个用户控件,里面有个TREEVIEW;当双击TREEVIEW的节点的时候,将节点的值传递给主界面的一个TEXTBOX。那么
1.子界面中代码如下:
public delegate void TreeViewDoubleClick(object sender, EventArgs e);
public partial class frmProjectList : BaseForm
{
private List<TreeViewDoubleClick> doubleClickEvents = new List<TreeViewDoubleClick>();
public event TreeViewDoubleClick TreeView_DoubleClick
{
add
{
doubleClickEvents.Add(value);
}
remove { doubleClickEvents.Remove(value); }
}
public frmProjectList()
{
InitializeComponent();
trvProject.DoubleClick += new EventHandler(trvProject_DoubleClick);
}
void trvProject_DoubleClick(object sender, EventArgs e)
{
foreach (TreeViewDoubleClick item in doubleClickEvents)
item(sender, e);
}
。。。。。。
}
public partial class frmProjectList : BaseForm
{
private List<TreeViewDoubleClick> doubleClickEvents = new List<TreeViewDoubleClick>();
public event TreeViewDoubleClick TreeView_DoubleClick
{
add
{
doubleClickEvents.Add(value);
}
remove { doubleClickEvents.Remove(value); }
}
public frmProjectList()
{
InitializeComponent();
trvProject.DoubleClick += new EventHandler(trvProject_DoubleClick);
}
void trvProject_DoubleClick(object sender, EventArgs e)
{
foreach (TreeViewDoubleClick item in doubleClickEvents)
item(sender, e);
}
。。。。。。
}
然后主界面代码如下:
代码
private void MainFrame_Load(object sender, EventArgs e)
{
frmProjectList projectList = new frmProjectList();
projectList.TreeView_DoubleClick += new TreeViewDoubleClick(projectList_trvProject_DoubleClick);
}
void projectList_trvProject_DoubleClick(object sender, EventArgs e)
{
//tsbNavigation_Click(null, null);
//真正运行的事件体。
}
{
frmProjectList projectList = new frmProjectList();
projectList.TreeView_DoubleClick += new TreeViewDoubleClick(projectList_trvProject_DoubleClick);
}
void projectList_trvProject_DoubleClick(object sender, EventArgs e)
{
//tsbNavigation_Click(null, null);
//真正运行的事件体。
}
public delegate void TreeViewDoubleClick(object sender, EventArgs e);
public partial class frmProjectList : BaseForm
{
private List<TreeViewDoubleClick> doubleClickEvents = new List<TreeViewDoubleClick>();
public event TreeViewDoubleClick TreeView_DoubleClick
{
add
{
doubleClickEvents.Add(value);
}
remove { doubleClickEvents.Remove(value); }
}
public frmProjectList()
{
InitializeComponent();
trvProject.DoubleClick += new EventHandler(trvProject_DoubleClick);
}
void trvProject_DoubleClick(object sender, EventArgs e)
{
foreach (TreeViewDoubleClick item in doubleClickEvents)
item(sender, e);
}
。。。。。。
public partial class frmProjectList : BaseForm
{
private List<TreeViewDoubleClick> doubleClickEvents = new List<TreeViewDoubleClick>();
public event TreeViewDoubleClick TreeView_DoubleClick
{
add
{
doubleClickEvents.Add(value);
}
remove { doubleClickEvents.Remove(value); }
}
public frmProjectList()
{
InitializeComponent();
trvProject.DoubleClick += new EventHandler(trvProject_DoubleClick);
}
void trvProject_DoubleClick(object sender, EventArgs e)
{
foreach (TreeViewDoubleClick item in doubleClickEvents)
item(sender, e);
}
。。。。。。