Winform自定义事件(委托)

当添加用户时,主窗体中的dataGridView控件后面直接添加添加该用户信息,总共分三步。

如下:

第一步:先创建UserEventArgs类,继承EventArgs

//定义委托
    public delegate void AddChangedEventHandler(object sender, UserEventArgs e);
    ///


    /// 传递新增记录
    ///

    public class UserEventArgs: EventArgs
    {
        private User _User;
        public User GetUser { get => _User; }

        public UserEventArgs(User enquiry)

        {
            _User = enquiry;
        }
    }

第二步:然后在添加用户窗体中定义事件

 public partial class AddUserForm : Form
    {
        public event AddChangedEventHandler UpdateUserInfo;
        public AddUserForm()
        {
            InitializeComponent();
        }

        private void AddUserForm_Load(object sender, EventArgs e)
        {

        }
        ///


        /// 打开此窗体之前先清除事件绑定的所有的方法的目的是为了防止事件处理方法被多次调用
        ///

        public void ClearEqDocChangedEvent()
        {
            //if (UpdateUserInfo != null)
            //{
            //    UpdateUserInfo.GetInvocationList().ToList().ForEach(p => UpdateUserInfo -= p as AddChangedEventHandler);
            //}
            //与上注释代码等价
            UpdateUserInfo?.GetInvocationList().ToList().ForEach(p => UpdateUserInfo -= p as AddChangedEventHandler);
        }
        ///
        /// 保存
        ///

        ///
        ///
        private void button1_Click(object sender, EventArgs e)
        {
            User user = new User()
            {
                id = Convert.ToInt32(this.textBox1.Text.Trim()),
                Name = this.textBox2.Text.Trim(),
                Sex = comboBox1.Text
            };
            //发布事件通知主界面更新数据
            //if (EqDocumentSaved != null)
            //{
            //    UserEventArgs eq = new UserEventArgs(user);
            //    EqDocumentSaved(this, eq);
            //}
            //与上面注释代码等价
            UpdateUserInfo?.Invoke(this, new UserEventArgs(user));
        }

        ///


        /// 取消
        ///

        ///
        ///
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }

第三步:最后在主窗体中实现

 public partial class MainForm : Form
    {
         List users;
        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            users = UserControllers.GetUserInfo();
            this.dataGridView1.DataSource = users;
        }
        ///


        /// 添加用户按钮事件
        ///

        ///
        ///
        private void btnAddUser_Click(object sender, EventArgs e)
        {
            using (AddUserForm uf=new AddUserForm())
            {
                uf.ClearEqDocChangedEvent();
                uf.UpdateUserInfo += new AddChangedEventHandler(MainForm_AginBindDate);
                uf.ShowDialog();
            }
        }
        ///
        /// 重新绑定数据源
        ///

        ///
        ///
        private void MainForm_AginBindDate(object sender, UserEventArgs eq)
        {
            UserControllers.SetUserValue(eq.GetUser);
            users = UserControllers.GetUserValue;
            this.dataGridView1.DataSource = null;
            this.dataGridView1.DataSource = users;
        }
    }

其中UserControllers.GetUserInfo()是数据源。

User是一个用户实体类

 public class User
    {
        public int id { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
    }

你可能感兴趣的:(c#,visualstudio)