嗨,我想控件添加到我的形式與一般的方法,是這樣的:如何動態添加(未知類型)控件到表單?
void addcontrol(Type quien)
{
this.Controls.Add(new quien);
}
private void btnNewControl_Click(object sender, EventArgs e)
{
addcontrol(typeof(Button));
}
這可能嗎?
嗨,我想控件添加到我的形式與一般的方法,是這樣的:如何動態添加(未知類型)控件到表單?
void addcontrol(Type quien)
{
this.Controls.Add(new quien);
}
private void btnNewControl_Click(object sender, EventArgs e)
{
addcontrol(typeof(Button));
}
這可能嗎?
你可以使用Activator.CreateInstance創建類型實例的新實例:
void AddControl(Type controlType)
{
Control c = (Control)Activator.CreateInstance(controlType);
this.Controls.Add(c);
}
這將是更好地使一個通用版本:
void AddControl<T>() where T : Control, new()
{
this.Controls.Add(new T());
}
這太酷了,我會哭的! thxs – Luiscencio 2010-01-15 23:14:44
+1爲通用版本。只要OP不關心Control基本提供的功能,這種方式就可以正常工作。 – 2010-01-16 00:57:46
這當然會影響工作
void addcontrol(Control ctl)
{
this.Controls.Add(ctl);
}
private void btnNewControl_Click(object sender, EventArgs e)
{
addcontrol(new Button());
}
這很好,但是如果你想檢查一下這種類型的控件是否已經存在BEEFORE創建一個新的? – Luiscencio 2010-01-15 22:55:21
您可以在表單中擁有多個相同類型的控件。 – 2010-01-15 22:57:17
是的,但它會使用可以用在許多很多很棒的東西中的內存。 – Luiscencio 2010-01-15 22:59:27
只要注意添加一個只有默認屬性值的控件是沒有用的。遲早,你真的*會*關心它是什麼樣的控制。 – 2010-01-15 22:54:41
@nobugz:這是當屬性網格進入行動! – Luiscencio 2010-01-15 22:57:33
製作您自己的設計師,是嗎? Grokking TypeConverter和PropertyDescriptor呢?這是一個狂野的旅程。 – 2010-01-16 00:39:02