如何在自定义webcontrol上动态创建一些公共属性。
例如,Web控件有5个TextBox控件。我需要每个TextBox控件的公共属性,以便能够设置TextBox控件的特定属性。
我希望能够循环webcontrol中的控件并为每个TextBox控件创建一个公共属性。
任何想法?
答案 0 :(得分:1)
您可以创建这样的属性
private TextBox[] textBoxes; //declared as a class member variable
public TextBox[] TextBoxes
{
get
{
if (textBoxes == null)
{
textBoxes =(from ctrl in this.Controls.OfType<Control>()
where ctrl is TextBox
select (TextBox)ctrl).ToArray();
}
return textBoxes;
}
}
答案 1 :(得分:1)
编辑:
如果在设计时出现子控件,那么您需要解释为什么要动态添加属性以访问控件成员 - 除非有充分的理由它听起来像一个糟糕的设计。
这是我的建议:
将控件保留为Friend
或Private
- 不要直接暴露它们(这会导致紧耦合并随着时间的推移变得讨厌)。
公开一个新的公共属性,在1x控件上获取/设置相应的属性;因此,如果您想在5x TextBoxes上设置.Text
,您将拥有5x属性。
完成它。
如果你试图通过动态添加它们来聪明,那么这是一个好的意图,会导致糟糕的结果。请记住:KISS(保持简单,愚蠢!)。
答案 2 :(得分:0)
公开WebContol(或任何类)中包含的控件并不是一个好的设计,因为它会使您的代码变得脆弱且难以维护。您应该将直接操作TextBoxes的代码放在WebControl中。