zoukankan      html  css  js  c++  java
  • 【转】C# 子窗体如何调用父窗体的方法

    网络上有几种方法,先总结如下:
    调用窗体(父):FormFather,被调用窗体(子):FormSub。

    方法1: 所有权法
           //FormFather:
           //需要有一个公共的刷新方法
           public void Refresh_Method()
           {
                   //...
           }
           //在调用FormSub时,要把FormSub的所有者设为FormFather
           FormSub f2 = new FormSub() ;
           f2.Owner = this;
           f2.ShowDialog() ;


           //FormSub:
           //在需要对其调用者(父)刷新时
           FormFather f1 ;
           f1 = (FormFather)this.Owner;
           f1.Refresh_Method() ;

     

    方法2:自身传递法
           //FormFather:
           //需要有一个公共的刷新方法
           public void Refresh_Method()
           {
                   //...
           }
           FormSub f2 = new FormSub() ;
           f2.ShowDialog(this) ;


           //FormSub:
           private FormFather p_f1;
           public FormSub(FormFather f1)
           {
                   InitializeComponent();
                   p_f1 = f1;
           }
           //刷新时
           p_f1.Refresh_Method() ;

     

    方法3:属性法
           //FormFather:
           //需要有一个公共的刷新方法
           public void Refresh_Method()
           {
                   //...
           }
           //调用时
           FormSub f2 = new FormSub() ;
           f2.P_F1 = this; //重点,赋值到子窗体对应属性
           f2.Show() ;

           //FormSub:
           private FormFather p_f1;
           public FormFather P_F1
           {
                   get{return p_f1;}
                   set{p_f1 = value;}
           }
           //刷新时
           p_f1.Refresh_Method() ;


    方法4:委托法
           //FormFather:
           //需要有一个公共的刷新方法
           public void Refresh_Method()
           {
                   //...
           }
           //调用时
           FormSub f2 = new FormSub() ;
           f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
           f2.Show() ;


           //FormSub:
           //声明一个委托
           public delegate void DisplayUpdate();
           //声明事件
           public event DisplayUpdate ShowUpdate;
           //刷新时,放在需要执行刷新的事件里

           if(ShowUpdate!=null)   ShowUpdate();

     

           //子窗体提交后
           private void btnOK_Click(object sender, EventArgs e)
           {
                   this.DialogResult = DialogResult.OK;
                   this.Close();
           }

     

          //判断子窗体
           if(form.ShowDialog() == DialogResult.OK)
           {
                    刷新父窗体中的DataGRIDVIEW数据
           }

  • 相关阅读:
    [ZZ] Valse 2017 | 生成对抗网络(GAN)研究年度进展评述
    [ZZ] 多领域视觉数据的转换、关联与自适应学习
    [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点
    [ZZ] 如何在多版本anaconda python环境下转换spyder
    支持向量机(Support Vector Machine,SVM)
    Wavelet Ridgelet Curvelet Contourlet Ripplet
    新技术革命思潮
    [ZZ] 边缘检测 梯度与Roberts、Prewitt、Sobel、Lapacian算子
    [ZZ] matlab中小波变换函数dwt2和wavedec2 系数提取函数appcoef2和detcoef2
    [综] 卷积的物理意义
  • 原文地址:https://www.cnblogs.com/netlyf/p/4436584.html
Copyright © 2011-2022 走看看