动态创建公共属性

时间:2010-07-15 14:44:38

标签: asp.net vb.net properties

如何在自定义webcontrol上动态创建一些公共属性。

例如,Web控件有5个TextBox控件。我需要每个TextBox控件的公共属性,以便能够设置TextBox控件的特定属性。

我希望能够循环webcontrol中的控件并为每个TextBox控件创建一个公共属性。

任何想法?

3 个答案:

答案 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)

编辑:

如果在设计时出现子控件,那么您需要解释为什么要动态添加属性以访问控件成员 - 除非有充分的理由它听起来像一个糟糕的设计。

这是我的建议:

  • 将控件保留为FriendPrivate - 不要直接暴露它们(这会导致紧耦合并随着时间的推移变得讨厌)。

  • 公开一个新的公共属性,在1x控件上获取/设置相应的属性;因此,如果您想在5x TextBoxes上设置.Text,您将拥有5x属性。

  • 完成它。

如果你试图通过动态添加它们来聪明,那么这是一个好的意图,会导致糟糕的结果。请记住:KISS(保持简单,愚蠢!)。

答案 2 :(得分:0)

公开WebContol(或任何类)中包含的控件并不是一个好的设计,因为它会使您的代码变得脆弱且难以维护。您应该将直接操作TextBoxes的代码放在WebControl中。