【问题标题】:How can I Dynamically add (unknown type) controls to a form?如何将(未知类型)控件动态添加到表单?
【发布时间】:2010-01-15 22:29:37
【问题描述】:

您好,我想使用通用方法向我的表单添加控件,如下所示:

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

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

这可能吗?

【问题讨论】:

  • 请注意,添加仅具有其默认属性值的控件永远不会有用。迟早,你真的确实在乎它是什么样的控制。
  • @nobugz: 那就是属性网格进入动作的时候!!!
  • 做自己的设计师,是吗?摸索 TypeConverter 和 PropertyDescriptor 了吗?这是一次疯狂的旅程。

标签: c# winforms controls


【解决方案1】:

您可以使用 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());
}

【讨论】:

  • +1 用于通用版本。只要 OP 不关心 Control 基础提供的功能以外的任何功能,这将正常工作。
【解决方案2】:

这肯定行得通

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

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

【讨论】:

  • 这很好,但是如果您想在创建新的控件之前检查该类型的控件是否已经存在怎么办?
  • 一个表单中可以有多个相同类型的控件。
  • 是的,但它会使用可用于很多很多很棒的东西的内存。
猜你喜欢
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2012-02-24
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
相关资源
最近更新 更多