Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Winforms,将父对象分配给新的子对象,而不是实例化表单_C#_Winforms_Mdi_Mdichild_Mdiparent - Fatal编程技术网

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

C#Winforms,将父对象分配给新的子对象,而不是实例化表单,c#,winforms,mdi,mdichild,mdiparent,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)

我有一个带有两个子窗体的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”,但仍然卡住了。

这是因为您试图将
类型设置为父级

在将类型设置为父级之前,需要实例化该类型:

Form_Parent parent = new Form_Parent();
Form_Child2 child = new Form_Child2(textBox1.Text);
child.MdiParent = parent;
child.Show();
当然,如果已经创建了父实例,则需要将父实例设置为该实例,而不是创建新实例


如果您不知道实例、对象和类是什么意思,我建议您阅读

这是因为您试图将
类型
设置为父类

在将类型设置为父级之前,需要实例化该类型:

Form_Parent parent = new Form_Parent();
Form_Child2 child = new Form_Child2(textBox1.Text);
child.MdiParent = parent;
child.Show();
当然,如果已经创建了父实例,则需要将父实例设置为该实例,而不是创建新实例


如果您不知道实例、对象和类是什么意思,我建议您阅读

如果您想成为一名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()

如果你想成为一名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()

您在哪里创建新的子窗体?Fabio,我试图在我的第一个子窗体的分部类(我还不完全确定这意味着什么)脚本中创建新的子窗体,在按钮单击事件处理程序的上下文中。我希望这能回答你的问题。你在哪里创建新的子窗体?Fabio,我试图在我的第一个子窗体的部分类(我还不完全确定这意味着什么)脚本中创建新的子窗体,在一个按钮单击事件处理程序的上下文中。我希望这能回答你的问题。非常感谢。是的,这个实例化过程是我不知道怎么做的。这很有趣。我确信我需要更多地研究可访问性以及对象和实例的性质。我看到您将Form_Parent的实例创建为一个自动实现的属性,虽然我们学习了这方面的基础知识,但我还没有完全理解它。所以,换句话说,我看到了它的工作原理,我模糊地看到了它是如何工作的,但我不清楚。。。。为什么它有效。但就目前而言,这是非常棒的,对我帮助很大——再次感谢你们。非常感谢你们。是的,这个实例化过程是我不知道怎么做的。这很有趣。我确信我需要更多地研究可访问性以及对象和实例的性质。我看到您将Form_Parent的实例创建为一个自动实现的属性,虽然我们学习了这方面的基础知识,但我还没有完全理解它。所以,换句话说,我看到了它的工作原理,我模糊地看到了它是如何工作的,但我不清楚。。。。为什么它有效。但现在这非常好,对我帮助很大再次谢谢你。谢谢你的帮助,是的,我正在尝试将新的孩子分配到原始的,现存的,家长表单。谢谢你的帮助,是的,我正在尝试将新的孩子分配到原始的,现存的,家长表单。