C#之子窗体与父窗体之间的参数传输

C#之子窗体与父窗体之间的参数传输

最近在做项目时涉及到了子窗体与父窗体之间的参数传输问题,通过查阅与学习总结了一种方法。

1、子窗体传父窗体

Form1为主窗体,Form2为子窗体。

实现:在Form1上添加一个button1,点击button1后显示Form2,再点击Form2的button1 在button1_Click事件中通过this.Owner将Form2的textBox2的值设置给Form1的textBox1(也可以将Form2中的某个值传给Form1,然后在Form1进行后续的处理,将示例代码修改一下即可)

示例代码:

    //Form1上的代码(主窗体)
    public partial class Form1 : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //显示Form2
            Form2 childForm = new Form2();
            childForm.Show();
            //定义Form2的“爸爸”为Form1 
            calForm.Owner = this;
            

            或者
            //Form2 childForm = new Form2();
            //childForm.Show(this);
        }
    }


    //Form2上的代码(子窗体)
    public partial class Form2 : Form
    {
        public CalibrationForm()
        {
            InitializeComponent();
        }
        private void button_Click(object sender, EventArgs e)
        {
            MainForm mForm = (MainForm)this.Owner;
            //注意 如果textBox1是放在panel1中的 则先找panel1 再找textBox1
            ((TextBox)mForm.Controls["textBox1"]).Text = this.textBox2.Text;

            //也可直接将控件的属性Modifiers修改为public 然后直接调用
            mForm.textBox1.Text = this.textBox2.Text;
        }
     }

2、父窗体传子窗体

Form1为主窗体,Form2为子窗体。

实现:在Form1上添加一个button1,点击button1后显示Form2,然后点击Form2的button1显示Form1中的某个参数。(用构造函数来实例化Form2窗体,然后把Form1的this指针传进去,这样就可以在Form2中调用Form1的参数(此参数必须是public属性的))

示例代码:

    //Form1上的代码(主窗体)
    public partial class Form1 : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        
        public string str = "你好!";
        private void button1_Click(object sender, EventArgs e)
        {
            //实例化子窗体,并将父窗体的指针this传入
            Form2 childForm = new Form2(this);
            childForm.Show();
        }
    }


    //Form2上的代码(子窗体)
    public partial class Form2 : Form
    {
        public CalibrationForm()
        {
            InitializeComponent();
        }

        private Form1 frmMain;
        public Form2(Form1 mForm)
        {
            InitializeComponent();
            this.frmMain = mForm;
        }

        private void button1_Click(object sender,EventArgs e)

        {

             this.textBox1.Text = mForm.str;  

        }
     }

子窗体与父窗体之间的参数传输方法不止这一种,还可以用委托等,这里只总结了个人认为较为简单的一种方法,如果以后涉及委托会进行补充。

猜你喜欢

转载自blog.csdn.net/Kevin_Sun777/article/details/109008722