我已经玩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。
非常感谢您的帮助:)
答案 0 :(得分:0)
你的想法完全不正确。
您在这里做的是...正在创建对内存中GroupBox
实例的引用。然后,您将当前引用指向此新实例。这意味着两个引用都指向您的内存GroupBox
..您的表单上的GroupBox
现在完全未被引用。
如果需要在控件上设置属性,请执行初始引用。目前,您正在更改内存中GroupBox
的属性。你在这里的想法是完全错误的。也许你会从告诉我们你想要实现的目标中获益,以便我们能够帮助你实现这一目标。