C#采用委托和事件进行窗体间通信

委托小技巧:1)哪个窗体(B窗体)要调用委托变量,哪个窗体自己创建委托变量对象。即谁激发(invoke),谁创建。

                         2)委托的事情是哪个窗体(A窗体)执行,委托关联的方法就定义在哪个窗体。

                          3)委托变量和方法的管理,需要从【创建调用窗体B】(窗体A或其他窗体)的地方进行关联

事件:事件是委托的进一步包装。

this.btnCreateChildForm.Click += new System.EventHandler(this.btnCreateChildForm_Click);

public event EventHandler Click

public delegate void EventHandler(object sender, EventArgs e);

 

项目FrmMain 嵌套左侧窗体FrmLeft和右侧窗体FrmRight,现在实现点击左侧嵌套窗体按钮(调用线圈),主窗体重新嵌套右侧窗体的效果。

FrmMain: 定义委托方法体

        #region 委托方法体
        /// <summary>
        /// 主界面显示右侧线圈数据的窗体
        /// </summary>
        /// <param name="objFormRight"></param>
        public void UpdateCoilRightUI(FrmCoilRight objFormRight)
        {
            OpenForm(objFormRight, panelRight);
        }

        #endregion

 #region 嵌入窗体显示

 

        //关闭嵌入的窗体
        private void ClosePreForm( Panel panel)
        {
            foreach (Control item in panel.Controls)
            {
                if (item is Form)
                {
                    Form objControl = (Form)item;
                    objControl.Close();
                }
            }
        }

        //打开窗口新窗体
        private void OpenForm(Form objForm, Panel panel)
        {
            ClosePreForm(panel);//关闭前面的窗体
            objForm.TopLevel = false;//将子窗体设置成非顶级控件      
            objForm.FormBorderStyle = FormBorderStyle.None;//去掉子窗体的边框
            objForm.Parent = panel;//指定子窗体显示的容器  
            objForm.Dock = DockStyle.Fill;//随着容器大小自动调整窗体大小
            objForm.Show();
        }

        #endregion

FrmLeft:  //创建委托对象并绑定方法体   //调用委托 嵌入窗体

/// <summary>
        /// 调用线圈文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnCoilRead_Click(object sender, EventArgs e)
        {
           。。。。

            //更新右侧窗体数据
            FrmCoilRight objFormRight = new FrmCoilRight(OpenFilePath);
            //创建委托对象并绑定方法体
            FrmMain frmMain =(FrmMain) this.Parent.Parent.Parent;
            Action<FrmCoilRight> actionCoilData = frmMain.UpdateCoilRightUI;
            //调用委托 嵌入窗体
            actionCoilData(objFormRight);
        }

FrmRight:

/// <summary>
        /// 根据数据文档路径初始化线圈数据文件
        /// </summary>
        /// <param name="fileName"></param>
        public FrmCoilRight( string fileName)
        {
            InitializeComponent();

            txtToolTips1.Text = "委托提示信息";
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值