zoukankan      html  css  js  c++  java
  • 多窗体之间方法调用 z

    C# Code:

    /// <summary>
    /// 主窗体接口
    /// </summary>
    public interface IMdiParent
    {
       void ParentFoo();
    }


    /// <summary>
    /// 子窗体接口
    /// </summary>
    public interface IMyChildForm
    {
       void Foo();
    }



    主窗体的代码:


    C# Code:

    /// <summary>
    /// 主窗体,实现IMdiParent接口
    /// </summary>
    public partial class frmParent : Form, IMdiParent
    {
       public frmParent()
       {
          InitializeComponent();
       }
       
       private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
       {
          //打开子窗体
          frmChildA child = new frmChildA();
          child.MdiParent = this;
          child.Show();
       }
       
       private void menuCallFoo_Click(object sender, EventArgs e)
       {
          //调用子窗体的Foo()方法
          Form activedChild = this.ActiveMdiChild;
          if ((activedChild != null) && (activedChild is IMyChildForm))
             (activedChild as IMyChildForm).Foo();
       }
       
       #region IMdiParent 成员
       
       public void ParentFoo()
       {
          MessageBox.Show("调用" this.GetType().FullName ".ParentFoo()方法!");
       }
       
       #endregion
    }

    //来源:C/S框架网(www.csframework.com) QQ:1980854898



    子窗体的代码:


    C# Code:

    /// <summary>
    /// 子窗体,实现IMyChildForm接口
    /// </summary>
    public partial class frmChildA : Form, IMyChildForm
    {
       public frmChildA()
       {
          InitializeComponent();
       }
       
       #region IMyChildForm 成员
       
       public void Foo()
       {
          MessageBox.Show("调用" this.GetType().FullName ".Foo()方法!");
       }
       
       #endregion
       
       private void btnParentFoo_Click(object sender, EventArgs e)
       {
          //调用父窗体的ParentFoo()方法
          if ((this.MdiParent != null) && (this.MdiParent is IMdiParent))
          (this.MdiParent as IMdiParent).ParentFoo();
       }
       
       private void btnErrCall_Click(object sender, EventArgs e)
       {
          //错误的调用
          (this.MdiParent as frmParent).ParentFoo();
       }
       
       //来源:C/S框架网(www.csframework.com) QQ:1980854898
       




    贴图图片


    实现思路:

    frmParent 窗体所在的模块依赖frmChildA所在模块,而frmChildA只依赖IMdiParent接口,这正是《敏捷软件开发》中所讲的依赖倒置原则。最 后,我们把IMdiParent接口部署在一个Common模块内,实际上frmParent与frmChildA只需要依赖Common模块。

  • 相关阅读:
    python3字典删除元素和添加元素的几种方法
    查看ef core 3.1/3.0/2.1.2生成的sql语句
    C#Qrcode生成二维码支持带标题
    .net RabbitMQ 介绍、安装、运行
    Golang之初探
    MySql5.7多实例配置教程
    Centos7 安装MySql 5.7
    sqlserver智能提示插件-sql prompt(9.4.6)的安装及注册流程
    ABP框架(asp.net core 2.X+Vue)模板项目学习之路(二)--切换MySql数据库
    ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一)
  • 原文地址:https://www.cnblogs.com/zeroone/p/4890212.html
Copyright © 2011-2022 走看看