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模块。

  • 相关阅读:
    linux 常用命令-编辑模式
    关于react虚拟DOM的研究
    oracle 分页的sql语句
    react+webpack+wepack-dev-server的环境中ant design图标离线的方法
    oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)
    eclipse 中使用git
    好东西要分享
    《梦断代码》阅读笔记二
    《梦断代码》阅读笔记一
    第二段冲刺进程4
  • 原文地址:https://www.cnblogs.com/zeroone/p/4890212.html
Copyright © 2011-2022 走看看