C#,WinForm:无法使用代码创建的控件设置designer-created-control

时间:2013-12-23 01:46:08

标签: c# winforms controls designer

我已经玩Windows Form Application半年了,现在我发现了一个非常有线的事情:在Form Designer中创建的控件不能用代码中的另一个实例设置。

以下是我所做的:

我创建了一个Windows Form Application,主要表单是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”。但是,当我按F5编译并运行时,groupBox1 Text仍然是“groupBox1”。即使我取消注释最后一行,groupBox1 Text也不会更改为“在代码中设置”。

我觉得它很有线。是因为我在Form Designer中创建了groupBox1实例吗?所以我不能在另一部分课堂上重估它?

我需要重新评估在表单设计器中为我的用户控件创建的控件。 任何帮助都感激不尽。谢谢你们:))

-------------------- EDIT ---------------------

我想要实现的是:我有两个用户控件: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。

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

你的想法完全不正确。

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

如果需要在控件上设置属性,请执行初始引用。目前,您正在更改内存中GroupBox的属性。你在这里的想法是完全错误的。也许你会从告诉我们你想要实现的目标中获益,以便我们能够帮助你实现这一目标。