【问题标题】:Adding custom colors to Color struct?将自定义颜色添加到 Color 结构?
【发布时间】:2012-04-03 10:52:33
【问题描述】:

是否可以添加到 .NET 中的颜色列表?例如 Color.Red Color.Green 等...已经存在,但我想添加更多颜色,例如 Color.SlightlyDarkGray...

编辑: 我需要这个,所以我可以为我的自定义用户控件设置默认颜色,而不是每次更改我想要的默认颜色时重新输入 245、65、65 或其他任何东西

【问题讨论】:

    标签: c# .net visual-studio colors struct


    【解决方案1】:

    否 - Color 中的所有字段都已存在;您不能向该类型添加任何内容。

    你总是可以创建你自己的类型,叫做MoreColors。显然,如果您感兴趣的话,这不会影响设计器中显示的内容。

    【讨论】:

    • 有没有办法从 Color 继承,然后在那里定义一些额外的东西,然后使用那个结构?
    • @EfeOzturkoglu:不——你不能从结构派生。目前还不清楚你为什么要这样做。
    • @EfeOzturkoglu:实际上和 Jon 建议的一样。这将是您自己的课程,但不是带有您的字段Color
    • 啊好的,我更新了问题,现在我想看看我是否可以让 Tigran 的建议起作用
    【解决方案2】:

    不,没有办法做到这一点。您可以考虑添加extension method,但它(如果会的话)只是一个方法,不是静态字段,因为它是在原生类中。

    【讨论】:

      【解决方案3】:

      你可以像这样实现 Jon Skeet 的想法

      public struct MoreColors // or public static class
      {
          public static Color SomeNiceColor { get { return Color.FromArgb(12,136,20); } }
          public static Color MyPreferredColor { get { return Color.FromArgb(209,80,0); } }
      }
      

      从 C# 6.0 开始,您可以使用 expression-bodied 属性。它们在语义上是相同的,只是语法更简单。

      public struct MoreColors 
      {
          public static Color SomeNiceColor => Color.FromArgb(12,136,20);
          public static Color MyPreferredColor => Color.FromArgb(209,80,0);
      }
      

      使用带有初始化程序的auto-implemented 只读属性(从 C# 6.0 开始也是如此)的方法更有效,因为它们只会被初始化一次,即使被多次访问:

      public struct MoreColors 
      {
          public static Color SomeNiceColor { get; } = Color.FromArgb(12,136,20);
          public static Color MyPreferredColor { get; } =  Color.FromArgb(209,80,0);
      }
      

      【讨论】:

        猜你喜欢
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        • 2010-11-25
        • 2019-02-17
        • 1970-01-01
        • 2016-12-06
        • 2021-11-13
        • 1970-01-01
        相关资源
        最近更新 更多