【问题标题】:C# Winforms, assigning parent to new child object, other than instantiating formC# Winforms,将父对象分配给新的子对象,而不是实例化表单
【发布时间】:2015-04-17 19:22:10
【问题描述】:

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

【问题讨论】:

  • 你在哪里创建新的子表单?
  • Fabio,我试图在我的第一个子表单的部分类(我还不完全确定这意味着什么)脚本中创建新的孩子,在事件处理程序的上下文中按钮单击。我希望这能回答你的问题。

标签: c# winforms mdi mdichild mdiparent


【解决方案1】:

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

【讨论】:

  • 非常感谢。是的,这个实例化过程是我不知道该怎么做的。这很有趣。我确信我需要更多地研究可访问性以及对象和实例的性质。我看到您将 Form_Parent 的实例创建为自动实现的属性,虽然我们学习了这方面的基础知识,但我还没有完全理解它。所以,换句话说,我看到它有效,我隐约看到它是如何工作的,但我不清楚....为什么它有效。但现在这非常好,对我帮助很大——再次感谢您。
【解决方案2】:

这是因为您尝试将 Type 设置为父级

您需要先实例化类型,然后再将其设置为 Parent :

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

当然,如果你的 parent 已经创建,你需要将 Parent 设置为那个实例,而不是创建一个新的。

如果您不知道 Instance、Object 和 Class 的含义,我建议您阅读 Object Oriented Programmation

【讨论】:

  • 感谢您的帮助,是的,我正在尝试将新孩子分配给原始的、现存的父表单。
猜你喜欢
  • 2011-11-17
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2015-07-15
  • 1970-01-01
  • 2013-03-23
相关资源
最近更新 更多