【问题标题】:C#, WinForm: cannot set designer-created-control with code-created controlC#、WinForm:无法使用代码创建的控件设置设计器创建的控件
【发布时间】:2014-01-11 05:27:13
【问题描述】:

我玩了半年的Windows Form Application,现在发现一个很连贯的事情:Form Designer中创建的控件不能用代码中的另一个实例来设置。

这是我所做的:

我创建了一个 Windows 窗体应用程序,主窗体是 Form1 类。然后我将一个 GroupBox 控件拖到 Form1 中,然后在 Form_Load 事件中添加此代码:

    private void Form1_Load(object sender, EventArgs e)
    {
        GroupBox gb = new GroupBox();
        gb.Text = "gb in code";
        groupBox1 = gb;
        //groupBox1.Text = "set in code";
    }

通常,我认为它会给实例 groupBox1 新的值'gb',它是 GroupBox 类的另一个实例,Text 属性是“gb in code”。但是,当我按 F5 编译运行时,groupBox1 的文本仍然是“groupBox1”。即使我取消注释最后一行,groupBox1 文本也不会更改为“在代码中设置”。

我觉得它是如此有线。是因为我在表单设计器中创建了 groupBox1 实例吗?所以我不能在课程的另一部分重新评估它?

对于我的用户控件,我有点需要重新评估在表单设计器中创建的控件。 任何帮助都感激不尽。谢谢大家:)

--------编辑----------

我想要实现的是:我有两个用户控件:UC1 和 UC2,现在我正在创建另一个用户控件 UC3,其中包含 UC1 和 UC2。我在启动UC3的时候,想把UC1和UC2的实例传给UC3,否则就得把UC1和UC2的所有属性值都传给UC3。我有点需要使用 Designer for UC3 来调整 UC1 和 UC2 的大小。

所以在 UC3 中,我将我的 UC1 和 UC2 拖到 UC3 Designer 中,然后我将公共属性指向 UC1 和 UC2,例如:

    public UserControl param_UC1
    {
        get
        {
            return UC1;
        }
        set
        {
            UC1 = value;
        }
    }

但不幸的是,UC1 不是由 param_UC1 设置的。现在我认为我不应该使用设计器,只需在 Load 事件期间添加 UC1。

非常感谢您的帮助:)

【问题讨论】:

  • 你在两个类中都使用了“部分”吗? --> "公共部分类 Foo"

标签: c# winforms controls designer


【解决方案1】:

你的想法是完全错误的。

您在这里所做的......是创建对内存中GroupBox 实例的引用。然后,您将当前参考指向这个新实例。这意味着两个引用都指向您的内存中的 GroupBox.. 您表单上的 GroupBox 现在完全未引用。

如果您需要在控件上设置属性.. 通过初始引用进行。目前您正在更改内存中GroupBox 的属性。你在这里的想法是完全错误的。也许你会从告诉我们你想要实现的目标中受益,这样我们就可以帮助你实现那个目标。

【讨论】:

  • 嗨,西蒙,我在我的问题中添加了一些内容,请帮忙。非常感谢。
  • 你应该只使用像 Automapper 这样的框架。它会为你复制一切。它也需要最少的设置..因为您要复制到完全相同的对象。
猜你喜欢
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 2020-06-15
  • 2016-12-08
相关资源
最近更新 更多