【发布时间】:2010-11-29 23:03:44
【问题描述】:
我想在运行时使用 C# 向我的 aspx Web 表单添加控件。
我想编写一个通用函数来创建任何类型的控件(例如:文本框、标签、按钮等)。
请有任何想法。 谢谢 BB
【问题讨论】:
-
您的意思是在浏览器(客户端)中的“运行时”或服务器上动态的“运行时”,所以客户端只会在页面刷新和回发时看到更新?跨度>
标签: c# dynamic controls generics
我想在运行时使用 C# 向我的 aspx Web 表单添加控件。
我想编写一个通用函数来创建任何类型的控件(例如:文本框、标签、按钮等)。
请有任何想法。 谢谢 BB
【问题讨论】:
标签: c# dynamic controls generics
你可以这样做,只要你想使用的控件类型都有一个默认的构造函数。
T AddControl<T>() where T : WebControl, new()
{
T ctrl = new T();
...
return ctrl;
}
【讨论】:
我想你可以这样做:
public void CreateControl<W>(Func<W> controlConstructor) where W : WebControl
{
W control = controlConstructor();
//add control and configure it, etc etc
}
【讨论】:
CreateControl<T>() where T : WebControl, new()。此外,您可能会传入一个代表图形中父对象的Control 实例,您可以在其中将新创建的控件添加到其Controls 集合中?
将文本框控件添加到占位符
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 方法中,我循环遍历我们想要在 phTextBoxes 占位符中动态创建的“n”个控件。
【讨论】: