【问题标题】:Declare Color as constant将颜色声明为常量
【发布时间】:2012-01-08 17:52:18
【问题描述】:

如何将Color 类型声明为const,如下所示:

private const Color MyLovedColor = Color.Blue;

这不起作用,因为 Color.Blue 是静态的而不是 const。

(readonly 对我没有帮助,因为我需要仅“支持”常量的属性的颜色

【问题讨论】:

  • 如何将属性更改为采用 (A),R,G,B 参数?
  • 不确定“仅支持常量”是什么意思...

标签: c# .net


【解决方案1】:

查看KnownColor 枚举。它可能会满足您的需求。

【讨论】:

【解决方案2】:

您只能为 const 分配一个文字值。在您的情况下,我会更喜欢字符串文字并将您的颜色定义如下:

const string mycolor = "Blue";

然后,在需要颜色的地方执行反向转换:

Color mynewcolor = Color.FromName(mycolor);

对不起,这是保留它的唯一方法const。

编辑:或者,您也可以将颜色保留为 (A)RGB 属性,存储在单个 int 值中。请注意,您可以使用十六进制文字显式设置颜色的不同组件(按 ARGB 序列):

const int mycolor = 0x00FFFFFF;
Color mynewcolor = Color.FromArgb(mycolor);

【讨论】:

  • 仅当您希望 A 为 00 时才有效。A > 0 alpha 将无法编译。您需要将其转换为具有负值的十进制 int。
【解决方案3】:

System.Drawing.Color 是一个struct,这意味着你不能拥有它的常量值。

【讨论】:

  • 他们知道这一点,他们想知道如何绕过它。
  • @AshBurlaczenko:“你无法解决这个问题”不是一个合理的答案吗?
  • “你无法解决这个问题”在编码中很少见,通常有一种变通方法,特别是如果限制是众所周知的。
  • @AlexanderGalkin:显然。我的观点是,没有正面的解决方案。如果可以放宽或重新定义约束(例如,您可以修改属性的代码),问题就可以解决。
  • 我忘记了对这个答案的评论,请在接受的答案下查看我的评论。
【解决方案4】:
private static readonly Color MyLovedColor = Color.Blue;

谢谢,这是你能得到的最接近的?

【讨论】:

  • (readonly 对我没有帮助,因为我需要仅“支持”常量的属性的颜色
  • 是的 - 但是 const 不是一个选项,因此没有这样的“解决方案”。虽然点了。
  • @ChrisF,现在你的名字附近有那个小钻石,你可以删除这个答案...... :)
【解决方案5】:

如果您使用 RGB 函数返回的 long 值作为常量会怎样?

例如,浅蓝色RGB(51,255,255) 的返回值为16777011

所以

Private Const ltBlue As Long = 16777011    
txtbox1.backcolor = ltBlue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2011-09-18
    • 2011-03-11
    • 1970-01-01
    • 2014-12-06
    相关资源
    最近更新 更多