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數據
       }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM