• 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

  • 相关阅读:
    php json_encode JSON_UNESCAPED_UNICODE
    ubuntu 添加多个ssh公钥和私钥
    如何自动化新增配置文件呢?
    git配置ssh公钥
    项目PHP新知识点
    mysql 数据库复制表 create table city1 like city;
    .NET 泛型集合数据写CSV文件
    .NET C# 泛型队列
    逆向地理编码--根据地址搜索定位,点击地图、获取经纬度信息
    正向地理编码-根据输入地址获取经纬度
  • 原文地址:https://www.cnblogs.com/hongfei/p/2822203.html
Copyright © 2020-2023  润新知