2010-11-29 70 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方法我循環。