除了创建自定义按钮,自定义文本框和自定义标签等,然后在应用程序的所有表单中使用这些控件,然后根据需要更改这些控件的默认颜色和字体,有一种简单的方法可以在包含多种表单的现有应用程序上实现这种类似CSS的功能吗?
顺便说一句,我知道我可以以编程方式打开每个* .Designer.cs文件,然后用“My.Namespace.My [Control]”搜索/替换“System.Windows.Forms。[Control]”的实例。 “但是我不确定在代码设置控件的字体和颜色以及类似属性的情况下它会如何工作。那么它只是确保自定义控件覆盖所有相关的getter方法吗?
答案 0 :(得分:2)
Windows窗体不提供任何类型的蒙皮。
一个简单的解决方法可能是在Form
类上编写某种扩展方法:
public static void ApplySkin(this Form form, Skin skin)
{
foreach (Control ctrl in form.Controls)
{
if (ctrl is TextBox)
{
TextBox textBox = (TextBox)ctrl;
textBox.BackColor = skin.BackColor;
textBox.ForeColor = skin.ForeColor;
textBox.Font = skin.Font;
...
}
else if (ctrl is ComboBox)
{
ComboBox comboBox = (ComboBox)ctrl;
comboBox.BackColor = skin.BackColor;
comboBox.ForeColor = skin.ForeColor;
comboBox.Font = skin.Font;
...
}
else if (ctrl is ...)
}
}
答案 1 :(得分:0)
关于Designer.cs文件 - 您应该完全避免更改其代码。它们由设计师使用,并且由于某种原因而被分离。
如果你想改变东西,在Form CTOR中,在调用InitializeComponent()之后,只需用你想要的任何改变调用你自己的函数(改变颜色,委托等属性值......)
如果您希望多个表单具有相同的样式(或功能),只需将此方法放在不同的类中,并通过将自身作为参数发送,使所有表单使用相同的方法。
现在,该方法不知道哪些控件在哪些表单上,因此您可以使用Controls.Find(Form方法之一)按名称查找控件。只需确保使用相同的约定正确命名表单中的控件(例如,所有列表框都将命名为listBoxX,其中X是数字...)。