2010-11-29 48 views
0

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

任何想法请。 感谢 BB

+0

您的意思是在浏览器(客户端)或“运行时”的“运行时”(如在服务器上动态显示),因此客户端只会在页面刷新和回发中看到更新? – cwap 2010-11-29 23:22:29

回答

2

你可以做到这一点,只要在控制类型要使用都有一个默认的构造函数。

T AddControl<T>() where T : WebControl, new() 
{ 
    T ctrl = new T(); 
    ... 
    return ctrl; 
} 
+0

大卫,谢谢。我想检查传入的控件是否是一个文本框并设置了一些属性。下面我粘贴了我写的代码,但这不是正确的。我哪里错了。如果(ctrl.Equals(System.Web.UI.WebControls.TextBox)) {...设置一些属性} – BumbleBee 2010-11-30 00:14:44

3

我想你可以做这样的事情:

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

     //add control and configure it, etc etc 
} 
+0

也可能是一个简单的`CreateControl ()其中T:WebControl,new()`表示具有简单构造函数的控件。另外,你可能会传入一个代表图形中父对象的“Control”实例,在其中将新创建的控件添加到其Controls集合中? – 2010-11-29 23:24:46

2

添加文本框控件通过的,我们希望在phTextBoxes占位符动态创建控件“N”号占位符

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/>")); 

     } 

    } 

在CreateTextBoxes方法我循环。