• 事件与委托更新父窗体数据,简单比较


    1.委托更新父窗页面。

         例如,功能:父窗体A,子窗体B,由A打开B窗体,更新A窗体数据

          A窗体代码:

            public delegate void reflshPassenger();//声明委托

          
            private void btnAddPassenger_Click(object sender, EventArgs e)//打开B窗体按钮,并把委托窗体给B窗体
            {
                reflshPassenger reflshData = getPassengers;
                new FZ_Passengers("add", reflshData).ShowDialog();
            }

              private void getPassengers()

            {

                  //...dosomething

             }

         B窗体代码:

          A.reflshPassenger reflshpassenger; //声明A窗体委托

          public FZ_Passengers(string _strState, formSubmitOrder.reflshPassenger _reflsh)
            {
                InitializeComponent();
                strState = _strState;
                reflshpassenger = _reflsh;//接受主窗体传递过来的委托
            }

           //最后在需要调用的位置,调用即可:

           if(reflshpassenger!=null)

           {

            reflshpassenger()

           }

    2.基于事件:

      窗体A代码:

      B b;

      注册事件:

            B= new Frm_B();
              
                B.eventLookUp += new EventHandler(frm_ValueChanged);//注册事件,要在ShowDialog之前实现
                B.ShowDialog();

      实现事件:

                 if (B.strName != "")
                {
                    this.lb_Sub.Text = frm.strName.Trim();
                }
                else
                {
                    return;
                }

    B窗体代码:

     事件声明:

                       public event EventHandler eventLookUp;
                       public string strName { get; set; }//声明字符串

                       //在具体的位置实现事件

                         if (eventLookUp != null)
                    {
                        strName = dgv_DataSource.Rows[e.RowIndex].Cells["userName"].Value.ToString().Trim();
                        this.eventLookUp(sender, e);
                        this.Close();
                    }

            总结,基于事件的实现方法,更简单,效率也高点,后期的维护性也高些!~

  • 相关阅读:
    Could not obtain transaction-synchronized Session for current thread
    Spring 具名参数NamedParameterJdbcTemplate
    Could not load driverClass jdbc:mysql://localhost:3306/spring
    Spring 使用AspectJ的三种方式
    Excel 若某列包含某个字符则特定列显示特定字符
    使用Spring的隐式注解和装配以及使用SpringTest框架
    Eclipse Oxygen 解决 自动导包的问题
    C3P0 WARN: Establishing SSL connection without server's identity verification is not recommended
    Eclipse 多行复制并且移动失效
    正则表达式 使用代码
  • 原文地址:https://www.cnblogs.com/it888/p/3777368.html
Copyright © 2020-2023  润新知