如何让一窗体的事件控制另一窗体的属性

C#中我新建一个WIN窗体项目,然后添加一个窗体,2个窗体FORM1和FORM2,我想让FORM2中的事件改变FORM1中的属性,应该怎么弄啊?
比如说FORM1中有一个TEXTBOX控件TEXTBOX1和一个按钮,我在文本框TEXTBOX1中输入某字符串(比如“ABC”),然后点击按钮时弹出FORM2窗体并关闭FORM1,FORM2中有一文本框TEXTBOX1,这个时候FROM2中的文本框TEXTBOX1里面显示的是我在FORM1中文本框TEXTBOX1输入的内容。
也就是如何在多个窗体中互相传值~~~
现在要做个通讯薄~~不知道怎么解决多窗体传值的问题~~~谁有经验介绍下啊~~谢谢了~~要是还有连接SQL SERVER数据库的例子也介绍下谢谢了~

第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如:

public static yourMainWindow pCurrentWin = null;

然后在主窗体构造函数中,给静态成员初始化,如下:

pCurrentWin = this;

那么在子窗体中调用父窗体,可以通过“主窗体类名. pCurrentWin”来操作当前的主窗体。

第二种,是在子窗体中定义一个私有成员,来保存当前主窗体对象,例如:

private yourMainWindow pParentWin = null;

然后在子窗体构造函数中,加一参数,如下:

public yourChildWindow( yourMainWindow WinMain )

{

pParentWin = WinMain;

//Other code

}

在主窗体创建子窗体的时候,要把this作为参数来构造子窗体,这样在子窗体中调用父窗体,可以直接用“this.pParentWin”就可以了

不过以上所作的,只是让你能够访问当前主窗体对象,那么如何操作控件,很多人直接修改控件的成员访问符,即把“private”改为“public”,我觉得这样破坏了本身类的封装,所以我比较喜欢的做法是增加公有属性或方法来供调用,例如:

public string ButtonText

{

get{ return btn.Text;}

set{ btn.Text = value;}

}

public void Button_Click()

{

this.btnDConvert.PerformClick();//Execute button click

}

================================================================

补充

================================================================

这个更仔细一些:

第1步:在解决方案上添加一个窗体Form2;并添加textBox1、textBox2、Button1,将Button1的标题设为“确定”,DialogResult属性设为“OK”;
第2步:在窗体Form2的类代码中添加两个私有字段: _username、_password,并添加两个public属性:UserName、Password;代码如下:
public partial class Form2: Form
{
private string _username;
private string _password;
public string UserName
{
get
{
return _username;
}
set
{
_username=value;
}
}
public string Password
{
get
{
return _password;
}
set
{
_password=value;
}
}
.....
}

第3步:窗体间相互传值演示
在Form1添加一个的Botton1、一个comboBox1,在Botton1_Click函数中如下代码:
private void button1_Click(object sender,EventArgs e)
{
Form2 myForm2 = new Form2();
myForm2.UserName="Richard";//Form1向Form2传值!!!
myForm2.Password="pwd1234";
DialogResult result= myForm2.ShowDialog();
if(result==DialogResult.OK)
{
comboBox1.Items.Add(myForm2.UserName);////Form2向Form1传值!!!
comboBox2.Items.Add(myForm2.Password);
}
}
要充分演示上述功能,还需要对Form2的代码作如下完善:
第1,在Form2_Load中添加如下代码:
private Form2_Load(object sender,EventArgs e)
{
textBox1.Text=_username;
textBox2.Text=_password;
}
第2,在textBox1、textBox2的textChanged事件中添加如下代码:
private void textBox1_TextChanged(object sender,EventArgs e)
{
this.UserName=textBox1.Text;
}
private void textBox2_TextChanged(object sender,EventArgs e)
{
this.Password=textBox2.Text;
}

参考资料:http://blog.csdn.net/knight94/archive/2006/03/18/628285.aspx http://bbs.pfan.cn/post-193292.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-29
使用接口。可以很方便的解决!
第2个回答  2008-11-01
首先修改自动生成的设计代码中控件的访问属性为public,然后在一个窗体中定义一个from类型字段,在构造函数中初始化为另一个窗体
相似回答