zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    数据库空间使用情况
    创建database link
    oracle导出指定几张表的数据以逗号等为分隔符
    Oracle手工创建实例
    通过shell脚本调用oracle存储过程并加入定时任务
    oracle导出与导入脚本
    在存储过程中为表添加月分区与日分区
    oracle添加分区
    ORACLE_SID与SID区别
    AUTHID DEFINER与AUTHID CURRENT_USER
  • 原文地址:https://www.cnblogs.com/hongfei/p/2822203.html
Copyright © 2011-2022 走看看