我有一个c#winform,它是我项目中所有表单的模板。
我的问题是如何为将从baseform中继承的表单中添加的控件设置一些属性。 例如,我希望表单中的所有文本框都具有特定的颜色,或者调用扩展方法。
现在我尝试了弹出的简单想法:
foreach (Control c in Controls)
{
if(c is ComboBox)
{
//do something
}
if(c is TextBox)
{
//do something
}
}
我将此代码放在基本表单加载事件中,但没有运气。我尝试将修饰符从继承的形式更改为protected,但没有运气。
这个问题有解决办法吗?或者我有义务将此代码放在继承baseForm的所有表单中?
答案 0 :(得分:0)
自定义控件是解决您手头问题的方法。只需扩展现有控件以获得您所需的属性,然后您就可以在所有表单中使用这些控件。
答案 1 :(得分:0)
你开始思考正确的方向,但你还没到那里。这个问题的解决方案肯定是面向对象的继承,但是你必须小心不要违反OOP的其他重要原则,即封装。
为了以不同的方式,不应要求表单“知道”它包含的控件的属性。它不应该知道或关心它包含ComboBox或TextBox或ListView。
相反,您应该子类化要修改的每个子控件,并在那里设置它们的默认属性。然后,您只需将自定义子类控件的实例添加到表单中,而不是内置控件。
因此,例如,您的自定义TextBox类可能如下所示:
public class CustomTextBox : TextBox // inherit from TextBox
{
public CustomTextBox()
{
// default constructor
}
// other logic...
}