zoukankan      html  css  js  c++  java
  • Winfrom子窗体刷新父窗体

    本人比较懒,直接从网上转载了一篇比较合适的文章,只是文章格式有点乱,地址是  http://aspnet.blog.163.com/blog/static/17515510920121126104433237/

    调用窗体(父):Form1,被调用窗体(子):Form2


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


    方法2:自身传递法
    //Form1:
    //需要有一个公共的刷新方法
    public   void   Refresh_Method()
    {
    //...
    }
    Form2   f2   =   new   Form2()   ;
    f2.ShowDialog(this)   ;
    //Form2:
    private   Form1   p_f1;
    public   Form2(Form1   f1)
    {
    InitializeComponent();
    p_f1   =   f1;
    }
    //刷新时
    p_f1.Refresh_Method()   ;


    方法3:属性法
    //Form1:
    //需要有一个公共的刷新方法
    public   void   Refresh_Method()
    {
    //...
    }
    //调用时
    Form2   f2   =   new   Form2()   ;
    f2.P_F1   =   this;
    f2.Show()   ;

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


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

    //声明一个委托
    public   delegate   void   DisplayUpdate();
    //声明事件
    public   event   DisplayUpdate   ShowUpdate;
    //刷新时,放在需要执行刷新的事件里
    ShowUpdate(); 最好用方法四

    扩展:

    子窗体向父窗体传值以及父窗体向子窗体传值 
    Code
    1: 所有权法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //
    }
    //在调用Form2时,要把Form2的所有者设为Form1
    Form2 f2 = new Form2() ;
    f2.Owner = this;
    f2.ShowDialog() ;
    //Form2:
    //在需要对其调用者(父)刷新时
    Form1 f1 ;
    f1 = (Form1)this.Owner;
    f1.Refresh_Method() ;

    eg:

    Form1中的函数:

     public void DiaoYong(string str)
            {
                this.textBox1.Text =str;
            }

    private void button2_Click(object sender, EventArgs e)
            {

                string str = this.textBox1.Text;
                Form2 f2 = new Form2(str);//在构造函数中,向子窗体传值。
                f2.Owner = this;
                f2.ShowDialog();
            }

    Form2中的函数:

     public Form2(string ss)
            {
                InitializeComponent();
                this.textBox1.Text = ss;

           }

     private void button1_Click(object sender, EventArgs e)
            {
                string st = textBox1.Text;

                Form1 f1;
                f1 = (Form1)this.Owner;
                f1.DiaoYong(st);

              this.Close();
            }

    如何在winform中子窗体提交数据后刷新父窗体中的DataGRIDVIEW数据?

    如何在子窗体刷新父窗体的datagridview


    父窗体中有个datagridview, 
    方法datashow为它绑定数据 
    子窗体是从父窗体中创建的,是用来新建数据的 
    在子窗体里有个保存按钮 
    请问如何在按钮事件中激发父窗体的datashow方法来给datagridview重新绑定数据 
    看了资料说要用 委托 
    请哪位高手给写个代码 
    在 子窗口里 定义事件 
    public class childform 

    public event EventHandler refreshData = null;

    protect void OnRefreshData() 

    if( refreshData != null ) 

    refreshData( this , eventArgs.Emptys); 

    }

    private void Save() 

    //保存代码 
    //刷新父窗口 
    OnRefreshData(); 

    }

    //在父窗口里 
    public class ParentForm 

    private void Add() 

    ChildForm form = new ChildForm(); 
    form.refreshData += new refreshData ( refreshData ); 
    form.ShowDialog(); 

    private void refreshData() 

    //刷新Datagridview代码 
    ........ 

    }


    C# WinForm 父窗体 子窗体 传值

    本次示例效果如下:
    Form1为父窗体(包含textBox1、button1)
    Form2为子窗体(包含textBox2、button2)

    父窗体给子窗体传值
    ==================
    1.点击Form1的button1 打开Form2
    父窗体给子窗体传值 可以调用重载子窗体的构造函数 直接传入相关数值

    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    Form2 frm2 = new Form2(this.textBox1.Text);
    frm2.Show();
    }
    }

    public partial class Form2 : Form
    {
    public Form2()
    {
    InitializeComponent();
    }

    public Form2(string strTextBox1Text)
    {
    InitializeComponent();
    this.textBox2.Text = strTextBox1Text;
    }
    }

    2.点击Form1的button1 打开Form2
    并调用子窗体Form2的公开属性或方法 将Form1的textBox1的值设置给Form2的textBox2

    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    Form2 frm2 = new Form2();
    frm2.TextBox2Text = this.textBox1.Text;
    frm2.Show();
    }
    }

    public partial class Form2 : Form
    {
    public Form2()
    {
    InitializeComponent();
    }

    public string TextBox2Text
    {
    set { this.textBox2.Text = value; }
    get { return this.textBox2.Text; }

    }

    3.点击Form1的button1 打开Form2
    在Form2_Load调用父窗体Form1的公开属性或方法 将Form1的textBox1的值设置给Form2的textBox2

    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    public string TextBox1Text
    {
    set { this.textBox1.Text = value; }
    get { return this.textBox1.Text; }
    }

    private void button1_Click(object sender, EventArgs e)
    {
    Form2 frm2 = new Form2();
    frm2.Show(this);//或 frm2.ShowDialog(this);

    ////或者
    //Form2 frm2 = new Form2();
    //frm2.Owner = this;
    //frm2.Show();//或 frm2.ShowDialog();
    }
    }
    public partial class Form2 : Form
    {
    public Form2()
    {
    InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
    Form1 frm1 = (Form1)this.Owner;
    this.textBox2.Text = frm1.TextBox1Text;
    }
    }

    子窗体给父窗体传值
    ==================
    4.点击Form1的button1 打开Form2
    再点击Form2的button2 
    在button2_Click事件中 通过this.Owner将Form2的textBox2的值设置给Form1的textBox1
    并关闭Form2

    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    Form2 frm2 = new Form2();
    frm2.Show(this);//或 frm2.ShowDialog(this);

    ////或者
    //Form2 frm2 = new Form2();
    //frm2.Owner = this;
    //frm2.Show();//或 frm2.ShowDialog();
    }
    }

    public partial class Form2 : Form
    {
    public Form2()
    {
    InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
    Form1 frm1 = (Form1)this.Owner;
    //注意 如果textBox1是放在panel1中的 则先找panel1 再找textBox1
    ((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;
    this.Close();
    }
    }

    5.点击Form1的button1 打开Form2
    再点击Form2的button2 
    在button2_Click事件中 通过this.Owner及调用父窗体Form1的公开属性或方法
    将Form2的textBox2的值设置给Form1的textBox1
    并关闭Form2

    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    public string TextBox1Text
    {
    set { this.textBox1.Text = value; }
    get { return this.textBox1.Text; }
    }

    private void button1_Click(object sender, EventArgs e)
    {
    Form2 frm2 = new Form2();
    frm2.Show(this);//或 frm2.ShowDialog(this);

    ////或者
    //Form2 frm2 = new Form2();
    //frm2.Owner = this;
    //frm2.Show();//或 frm2.ShowDialog();
    }
    }

    public partial class Form2 : Form
    {
    public Form2()
    {
    InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
    Form1 frm1 = (Form1)this.Owner;
    frm1.TextBox1Text = this.textBox2.Text;
    this.Close();
    }
    }

  • 相关阅读:
    rabbitmq 学习
    linux下安装rabbitmq 集群
    excel中将时间戳转换为日期格式
    python实现批量修改服务器密码
    python 根据字典的键值进行排序
    python字符串的拼接
    python的变量
    python基础1
    【性能分析】使用Intel VTune Amplifier
    【vim】搜索与替换
  • 原文地址:https://www.cnblogs.com/programsky/p/4657358.html
Copyright © 2011-2022 走看看