通过子窗口向外引发一个事件,父窗口去实现该事件,我们可以再不关闭父窗口和子窗口的情况下进行数据的传输显示
思路:在子窗口“添加用户”的中通过点击"添加用户",会动态的向外引发一个事件,通过该事件,我们可以进行数据传递
在其他窗口中,可以来响应该事件
其中,子窗口只负责向外引发一个事件,将事件的实现方法委托给别的对象,至于事件具体如何做处理,子窗口是不关心的,这一点体现了松耦合的一个设置
涉及到的知识点: 1.如何定义一个事件? public delegate void UserAddEventHandler(); public event UserAddEventHandler UserAdd; 2.如何响应子窗口引发出来的事件? userDialog.UserAdd += userDialog_UserAdd;//将UserAdd的实现委托为userDialog_UserAdd方法 void userDialog_UserAdd() { //方法体 } 3.子窗口中如何向父窗口传递数据? 通过delegate的声明中,添加两个参数: public delegate void UserAddEventHandler(object sender,UserEventArgs e); 其中UserEventArgs是一个继承自EventArgs的类 public class UserEventArgs : EventArgs { public User currentUser { get;set;} public UserEventArgs(User user) { this.currentUser = user; } } 从而,在向外引发事件的时候,将User的信息通过第二个参数传递出去 private void button1_Click(object sender, EventArgs e) { //向外引发一个事件 if(UserAdd!=null) { User user = new User(); user.UserName = textBox3.Text; user.PassWord = textBox4.Text; UserAdd(this,new UserEventArgs(user)); } } 在父窗口的userDialog_UserAdd方法中,就可以对接收到的数据进行处理 private void 添加用户ToolStripMenuItem_Click(object sender, EventArgs e) { FrmUser userDialog = new FrmUser(); //将UserAdd的实现委托为userDialog_UserAdd方法 userDialog.UserAdd += userDialog_UserAdd; userDialog.ShowDialog(); } void userDialog_UserAdd(object sender,UserEventArgs e) { MessageBox.Show(e.currentUser.UserName); }
原创文章,转载请注明出处:http://www.cnblogs.com/hongfei/archive/2012/12/17/2822203.html