【问题标题】:How can I easily keep consistent UI settings in C# Winform application?如何在 C# Winform 应用程序中轻松保持一致的 UI 设置?
【发布时间】:2010-03-14 20:39:39
【问题描述】:

我有很多不同的UserControls,并希望保持一致的 UI 设置(主要是颜色和字体)。我的第一次尝试是这样的:

public class UISettings
{
//...
    public void SetupUserControl(ref UserControl ctrl)
    {
        ctrl.BackColor = this.BackColor;
    }
}

像这样在每个控件中调用:

settings.SetupUserControl(ref this);

由于this 是只读的,它不能通过ref 参数传递,所以这不起作用。还有哪些其他选项可以在不手动更改每个项目的属性的情况下保持一致的 UI?

【问题讨论】:

    标签: c# .net winforms user-interface


    【解决方案1】:

    继承!如果您有一个将不断使用相同样式的表单或控件,并且您想将其设置为您的基础,只需创建您自己的从表单/控件继承的用户控件。默认情况下,您的所有表单都将继承自“表单”。不要从默认表单继承,而是创建一个从表单继承的新用户控件,然后将其作为您的基类。

    CustomForm : Form // Your custom form.
    
    Form1 : CustomForm // Inherit from it.
    

    ...同样适用于组件。如果您希望按钮具有相同的样式,请创建一个用户控件并让它从按钮控件继承 -- 然后使用自定义控件。

    当您想要更改基本样式或任何设置时,只需更改您的自定义控件设置 - 您的新表单/控件将自动更新!

    【讨论】:

    • 我曾经这样做过,这是个好主意(+1),但最近我觉得这还不够好。那个问题是它缺乏内置的运行时主题/皮肤支持。内置支持仅在设计时提供。您当然可以将其构建到您继承的控件中,但这是额外的工作。如果您必须编写额外的代码来支持主题(并且如果您有足够具体的风格来证明继承的合理性,您可能应该这样做),您也可以编写该代码来处理任何库存控制。
    • 好吧,为正确的工作使用正确的工具。没有一种解决方案是全球性的。 :)
    【解决方案2】:

    做同样的事情。不要通过 ref 传递它。 UserControl 已经是一个引用对象,因此无需使用 ref 关键字将其传递到您的方法中。

    您可能还需要考虑一种递归方法,该方法将查找表单上的所有用户控件并将其传递给您的方法。

    【讨论】:

    • 我做了递归方法,效果很好,谢谢。
    【解决方案3】:

    提供此类设置的基类怎么样?

    【讨论】:

      【解决方案4】:

      两个答案:

      1. 你不需要ref,控件是对象是引用类型。放下它。
      2. 创建一个 Base UserControl 并从该基础派生控件。您仍然可以这样做,只需编辑控件的类定义。对于新控件,您可以按照向导进行操作。

      提示:在 baseControl 中设置样式。然后确保派生控件不会覆盖,最好的方法是扫描 *.Designer.cs 文件并删除您知道应该来自基础的所有设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-05
        • 2015-12-14
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        相关资源
        最近更新 更多