WinForm中窗体间的数据传递(二)

通过子窗口向外引发一个事件,父窗口去实现该事件,我们可以再不关闭父窗口和子窗口的情况下进行数据的传输显示

思路:在子窗口“添加用户”的中通过点击"添加用户",会动态的向外引发一个事件,通过该事件,我们可以进行数据传递

在其他窗口中,可以来响应该事件

其中,子窗口只负责向外引发一个事件,将事件的实现方法委托给别的对象,至于事件具体如何做处理,子窗口是不关心的,这一点体现了松耦合的一个设置

涉及到的知识点:

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

原文地址:https://www.cnblogs.com/hongfei/p/2822203.html