指定从基础到继承的属性

时间:2011-08-19 09:41:24

标签: c# .net winforms inheritance custom-controls

我有一个c#winform,它是我项目中所有表单的模板。

我的问题是如何为将从baseform中继承的表单中添加的控件设置一些属性。 例如,我希望表单中的所有文本框都具有特定的颜色,或者调用扩展方法。

现在我尝试了弹出的简单想法:

 foreach (Control c in Controls)
        {

            if(c is ComboBox)
            {
                //do something
            }
            if(c is TextBox)
            {
               //do something
            }
        }

我将此代码放在基本表单加载事件中,但没有运气。我尝试将修饰符从继承的形式更改为protected,但没有运气。

这个问题有解决办法吗?或者我有义务将此代码放在继承baseForm的所有表单中?

2 个答案:

答案 0 :(得分:0)

自定义控件是解决您手头问题的方法。只需扩展现有控件以获得您所需的属性,然后您就可以在所有表​​单中使用这些控件。

答案 1 :(得分:0)

你开始思考正确的方向,但你还没到那里。这个问题的解决方案肯定是面向对象的继承,但是你必须小心不要违反OOP的其他重要原则,即封装。

为了以不同的方式,不应要求表单“知道”它包含的控件的属性。它不应该知道或关心它包含ComboBox或TextBox或ListView。

相反,您应该子类化要修改的每个子控件,并在那里设置它们的默认属性。然后,您只需将自定义子类控件的实例添加到表单中,而不是内置控件。

因此,例如,您的自定义TextBox类可能如下所示:

public class CustomTextBox : TextBox    // inherit from TextBox
{
    public CustomTextBox()
    {
        // default constructor
    }

    // other logic...

}