C# 什么';更改应用程序上多个表单样式的最简单方法是什么?

C# 什么';更改应用程序上多个表单样式的最简单方法是什么?,c#,.net,css,forms,C#,.net,Css,Forms,除了创建自定义按钮、自定义文本框和自定义标签等,然后在应用程序的所有表单中使用这些控件,然后根据需要更改这些控件的默认颜色和字体,有没有一种简单的方法可以在包含多个表单的现有应用程序上实现类似css的功能 顺便说一句,我知道我可以通过编程打开每个*.Designer.cs文件,然后用“My.Namespace.My[Control]”搜索/替换“System.Windows.Forms.[Control]”的实例,但我不确定在代码设置控件的字体、颜色和类似属性的情况下,这将如何工作。那么,是否只

除了创建自定义按钮、自定义文本框和自定义标签等,然后在应用程序的所有表单中使用这些控件,然后根据需要更改这些控件的默认颜色和字体,有没有一种简单的方法可以在包含多个表单的现有应用程序上实现类似css的功能


顺便说一句,我知道我可以通过编程打开每个*.Designer.cs文件,然后用“My.Namespace.My[Control]”搜索/替换“System.Windows.Forms.[Control]”的实例,但我不确定在代码设置控件的字体、颜色和类似属性的情况下,这将如何工作。那么,是否只需要确保自定义控件覆盖所有相关的getter方法?

关于Designer.cs文件,您可能根本不应该更改它们的代码。它们由设计师使用,并且由于某种原因而分开

如果确实要更改内容,在调用InitializeComponent()后,在表单CTOR中,只需调用自己的函数,并进行任何更改(更改属性值,如颜色、委托等)

如果希望多个表单具有相同的样式(或功能),只需将此方法放在不同的类中,并通过将其自身作为参数发送,让所有表单使用相同的方法


当然,现在该方法不知道哪些控件在哪些窗体上,所以您可以使用controls.Find(窗体方法之一)按名称查找控件。只需确保表单中的控件使用相同的约定正确命名(例如,所有列表框都将命名为listBoxX,其中X是数字…。

Windows表单不提供任何类型的蒙皮

一个简单的解决方法是在
表单
类上编写某种扩展方法:

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 ...)
    }
}

如果不购买第三方库,就没有一种简单的方法可以“皮肤化”app.AFAIK。请查看DevExpress的产品。找到了这个免费的(放弃了)(但不知道使用它是什么样子):如果你使用WPF,你可以使用样式,然后在每个表单上应用,但是关于winforms,我不知道。我想telerik也提供了一些自定义表单。