• 多窗体之间方法调用 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模块。

  • 相关阅读:
    label语句
    node.js入门(五)认识express和express-static中间件文件静态管理
    node.js(四)小结
    node.js入门(三)http数据解析
    node.js入门(二)文件系统
    node.js入门(一)搭建一个简单的服务
    微信小程序input安卓获取不了全英文的值
    微信小程序爬坑---textarea使用wx:if、wx:else、hidden的问题
    mysql补集合计算
    在Tomcat中配置基于springside的项目
  • 原文地址:https://www.cnblogs.com/zeroone/p/4890212.html
Copyright © 2020-2023  润新知