C# 如何向窗体动态添加(未知类型)控件?

C# 如何向窗体动态添加(未知类型)控件?,c#,winforms,controls,C#,Winforms,Controls,嗨,我想用一个通用方法将控件添加到我的表单中,类似于: void addcontrol(Type quien) { this.Controls.Add(new quien); } private void btnNewControl_Click(object sender, EventArgs e) { addcontrol(typeof(Button)); } 这可能吗?您可以使用以下方法从类型实例创建新实例: 最好制作一个通用版本: void Ad

嗨,我想用一个通用方法将控件添加到我的表单中,类似于:

void addcontrol(Type quien)
{
    this.Controls.Add(new quien);            
}

private void btnNewControl_Click(object sender, EventArgs e)
{
    addcontrol(typeof(Button));
}

这可能吗?

您可以使用以下方法从类型实例创建新实例:

最好制作一个通用版本:

void AddControl<T>() where T : Control, new()
{
    this.Controls.Add(new T());
}
void AddControl(),其中T:Control,new()
{
this.Controls.Add(new T());
}

这肯定会奏效

void addcontrol(Control ctl)
{
    this.Controls.Add(ctl);            
}

private void btnNewControl_Click(object sender, EventArgs e)
{
    addcontrol(new Button());
}

只需注意,添加一个只有默认属性值的控件是没有用的。迟早,你真的会关心它是什么样的控件。@nobugz:那是属性网格进入动作的时候!!!做你自己的设计师,是吗?找到TypeConverter和PropertyDescriptor了吗?这是一个疯狂的过程。这很好,但是如果你想在创建一个新控件之前检查该类型的控件是否已经存在呢?你可以在一个表单中拥有多个相同类型的控件。是的,但它将使用可以用于许多非常棒的事情的内存。+1用于通用版本。只要OP不关心控件库提供的功能以外的任何功能,这就可以正常工作。
void addcontrol(Control ctl)
{
    this.Controls.Add(ctl);            
}

private void btnNewControl_Click(object sender, EventArgs e)
{
    addcontrol(new Button());
}