其中,子窗口只负责向外引发一个事件,将事件的实现方法委托给别的对象,至于事件具体如何做处理,子窗口是不关心的,这一点体现了松耦合的一个设置
涉及到的知识点: 
如何定义一个事件? 
复制代码 代码如下:
public delegate void UserAddEventHandler(); 
public event UserAddEventHandler UserAdd; 
.如何响应子窗口引发出来的事件? 
userDialog.UserAdd += userDialog_UserAdd;//将UserAdd的实现委托为userDialog_UserAdd方法 
void userDialog_UserAdd() 
{ 
  //方法体 
} 
.子窗口中如何向父窗口传递数据? 
通过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); 
}
您可能感兴趣的文章:
