我正在尝试使用父表单中的变量来存储变量。父表单的代码如下:
public partial class Form1 : Form
{
internal string testVar;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
testVar = "button1";
MessageBox.Show("testVar = " + testVar);
}
private void button2_Click(object sender, EventArgs e)
{
Form2 newfrm = new Form2();
newfrm.Show();
}
}
因此,如果用户按下button1,它会将变量设置为“button1”。按下按钮2启动子表单,定义如下:
public partial class Form2 : Form1
{
public Form2()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
MessageBox.Show(base.testVar);
}
}
因此,button3显示父表单中内部变量的值。但是,它是空白的(无论是否设置)。为什么子窗体不能看到父级中的值?
答案 0 :(得分:1)
因为Parent和Child表单的实例都有自己的副本。
这应该有效(并解释):
private void button2_Click(object sender, EventArgs e)
{
Form2 newfrm = new Form2();
newFrm.testVar = this.testVar;
newfrm.Show();
}
答案 1 :(得分:1)
您的代码无法访问父表单!您正在使用base.testVar
,它访问从基础类继承的当前对象中的变量,但不是来自创建了该Form1
实例的Form2
实例 public partial class Form1 : Form
{
...
private void button2_Click(object sender, EventArgs e)
{
Form2 newfrm = new Form2();
newfrm.ParentForm = this;
newfrm.Show();
}
}
public partial class Form2 : Form1
{
public Form2()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
string v = (ParentForm != null) ? ParentForm.testVar : "<no parent set>";
MessageBox.Show(v);
}
public Form1 ParentForm;
}
实例!
也许您想要以下内容:
ParentForm
(嗯,您需要为{{1}}提供更好的保护。)
答案 2 :(得分:0)
这是两个独立的实例。一个是您的主窗体,Form1的一个实例,它将testVar
变量设置为一个值。另一个是辅助表单,Form1的一个实例派生自Form1,但其testVar
变量不设置。