在写程序的时候用到了由子窗体确定参数后返回给父窗体。这就涉及到窗体间传值的问题。C#是不提供窗体间变量和控件的直接相互调用(就是说即使Form1的变量和控件属性都设为Public或者Internal,在Form2种也不能通过 Form1.变量 或者 Form1.控件 的形式调用)。在C#中窗体都是类的对象形式出现,在New之后出现的窗体已经和初始的窗体是完全不同的实例。
通过查找资料,有两种方便的方法可实现传值目的。下面举例说明:
Form1是第一个窗体,包括Button11,Button12两个按钮。Button11点击事件产生Form2 窗体。
Form2是第二个窗体,包括Button21一个按钮。Button21 点击事件改变Button11和Button12的Text属性。
1、公用静态变量
首先在Form1种定义一个静态变量来得到Button11
public/internal static Button pButton;
然后在Form1_Load中赋值:
pButton=Button11;
此时就可以在Button11的事件中写如下代码来实现Form2
Form2 pForm2=new Form2();
pForm2.Show();
最后就可以在Form2 的Button21事件中来传递值
Form1.pButton.Text = "哈哈";
2、委托
该方法稍微麻烦点,首先要把Form1 的Button12的Modifiers属性修改为Public或者Internal。
然后前面Form1的Button11的事件中Form2实例化代码需要修改为:
Form2 pForm2=new Form2(this);
最后在Form2的Button21点击事件中写代码为:
Form1 pForm1 = new Form1();
pForm1 = (Form1)this.Owner;
pForm1.button2.Text = "Hello";
这样子就完成了控件值的传递了。