WinForms继承的形式无法看到父变量

时间:2011-01-31 10:33:44

标签: c# winforms inheritance

我正在尝试使用父表单中的变量来存储变量。父表单的代码如下:

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显示父表单中内部变量的值。但是,它是空白的(无论是否设置)。为什么子窗体不能看到父级中的值?

3 个答案:

答案 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变量设置。