子与人歌而善 必使反之:C#中如何在窗体间访问其他窗体中的成员呢
来源:百度文库 编辑:中财网 时间:2024/04/30 02:58:53
经常在百度知道里面看到有朋友问这个问题.也经常打字回答.现在懒了.写这篇文章希望能一劳永逸.
环境:VS2005(.NET2.0)+WindowsXp WinForm开发
在C#中如何在窗体间访问其他窗体中的成员呢?
红色字体为需要注意的地方
方法一:重载构造函数
新建2个窗体.分别为Form2和Form3
Form2中有一个TextBox,名字为textBox1.如图所示:
现在我想通过Form3里面的代码.来修改Fomr2中的textBox1的内容该怎么办呢??
我们来重载Form3的构造函数.Form3代码如下:
public partial class Form3 : Form
{
private Form target = null;
public Form3()
{
InitializeComponent();
}
public Form3(Form form)
{
InitializeComponent();
target = form;
}
private void button1_Click(object sender, EventArgs e)
{
target.Controls["textBox1"].Text = "你是猪!!!";
}
}
这样通过button1的点击可以修改Form2的textBox1的值.
当然这种情况下Form3必须是由Form2打开的.
Form2打开Form3的代码如下:
Form3 form = new Form3(this);
form.Show();
点击Form3的button1结果如下:
方法二:使用静态成员
Form2代码如下:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public static string MySqlString = "";
}
在Form3中可以直接通过类访问该变量.代码如下
private void button1_Click(object sender, EventArgs e)
{
//target.Controls["textBox1"].Text = "你是猪!!!";
Form2.MySqlString = "select * from UserInfo";
}
控件同样也可以声明为static的.但是你要确保你的窗体只有一个实例.否则会出错..(十分不推崇把控件声明为static的.成员变量还可以)
方法三:设置Owner属性(基本等同与重载构造)
同样Form3必须是由Form2打开的.
Form2打开Fomr3的代码:
Form3 form = new Form3();
form.Owner = this;
form.ShowDialog();
Form3操作Form2控件的代码如下:
private void button1_Click(object sender, EventArgs e)
{
this.Owner.Controls["textBox1"].Text = "你是猪!!!";
}