C# 用于在运行时创建控件的通用函数

C# 用于在运行时创建控件的通用函数,c#,dynamic,controls,generics,C#,Dynamic,Controls,Generics,我想在运行时使用C#向我的aspx web表单添加控件。 我想写一个通用函数,将创建任何类型的控件(例如:文本框,标签,按钮等) 有什么想法吗。 谢谢 BB我想你可以这样做: public void CreateControl<W>(Func<W> controlConstructor) where W : WebControl { W control = controlConstructor(); //add control and

我想在运行时使用C#向我的aspx web表单添加控件。
我想写一个通用函数,将创建任何类型的控件(例如:文本框,标签,按钮等)

有什么想法吗。 谢谢
BB

我想你可以这样做:

public void CreateControl<W>(Func<W> controlConstructor) where W : WebControl
{
         W control = controlConstructor();

         //add control and configure it, etc etc
}
public void CreateControl(Func controlConstructor),其中W:WebControl
{
W control=controlConstructor();
//添加控件并对其进行配置等
}

只要要使用的控件类型都有默认构造函数,就可以这样做

T AddControl<T>() where T : WebControl, new()
{
    T ctrl = new T();
    ...
    return ctrl;
}
T AddControl(),其中T:WebControl,new()
{
T ctrl=新的T();
...
返回ctrl;
}

将文本框控件添加到占位符

private void CreateTextBoxes()  
{

      for (int counter = 0; counter <= NumberOfControls; counter++)
      {
          TextBox tb = new TextBox();
          tb.Width = 150;
          tb.Height = 18;
          tb.TextMode = TextBoxMode.SingleLine;
          tb.ID = "TextBoxID" + (counter + 1).ToString();
          // add some dummy data to textboxes
          tb.Text = "Enter Title " + counter;
          phTextBoxes.Controls.Add(tb);
          phTextBoxes.Controls.Add(new LiteralControl("<br/>"));

      }

  }
private void createTextBox()
{

对于(int counter=0;counter您指的是浏览器(客户端)中的“运行时”或服务器上的“动态运行时”,因此客户端只会在页面刷新和回发时看到更新?可能还有一个简单的
CreateControl(),其中T:WebControl,new()
用于那些具有简单构造函数的控件。此外,您可能会传入一个表示图中父对象的
控件的实例,在该实例中,您将新创建的控件添加到其
控件
集合中?David,谢谢。我想检查传入的控件是否是文本框并设置一些属性。下面我粘贴了我编写的代码,但这不是正确的代码。我错在哪里了。如果(ctrl.Equals(System.Web.UI.WebControl.TextBox)){…设置一些属性}找到了答案。如果(ctrl是TextBox){…设置一些属性}如果传入的控件是Label,并且我想设置标签的文本,我该怎么做呢?如果(ctrl是Label){((Label)ctrl).text=“FirstName:”;}我会收到错误:“无法将类型“T”转换为“System.Web.UI.Webcontrols.lable”