C#Winforms,将父项分配给新的子对象,而不是实例化表单

时间:2015-04-17 19:22:11

标签: c# winforms mdi mdichild mdiparent

我有一个带有两个子窗体的MDI容器。我们已经教过(并且MSDN文档仅提供了示例)使用关键字“this”,它假设有问题的子对象是从MDI容器本身创建的。

如果我在MDI容器中创建对象,这是正确的:

Form_Child2 child = new Form_Child2(textBox1.Text);
child.MdiParent = this;
child.Show();

相反,我正在尝试做更多的事情:

Form_Child2 child = new Form_Child2(textBox1.Text);
child.MdiParent = Form_Parent;
child.Show();

但是,这会抛出一个错误,指出“Form_Parent”是一种类型,不能用作变量。我想我模糊地理解它的作用,但目前尚不清楚。我已经尝试过研究关键词'this',但仍然卡住了。

2 个答案:

答案 0 :(得分:4)

如果你想成为一名C#程序员,理解类型和对象之间的区别是非常重要的。是的,这里有个大问题,这里需要一个Form_Parent实例,你不能使用类型名称。

只有一个 MDI父窗口的实例。您可以利用哪些内容,可以向父类添加静态属性。看起来像这样:

public partial class Form_Parent : Form {

    public static Form_Parent Instance { get; private set; }

    public Form_Parent() {
        InitializeComponent();
        Instance = this;
    }
    // etc..
}

现在很简单:

Form_Child2 child = new Form_Child2(textBox1.Text);
child.MdiParent = Form_Parent.Instance;
child.Show()

答案 1 :(得分:0)

这是因为你试图将Type设为父母

在将其设置为Parent之前,您需要实例化该类型:

Form_Parent parent = new Form_Parent();
Form_Child2 child = new Form_Child2(textBox1.Text);
child.MdiParent = parent;
child.Show();

当然,如果您的父级已经创建,则需要将Parent设置为该实例,而不是创建新实例。

如果您不知道实例,对象和类的含义,我建议您阅读Object Oriented Programmation