以编程方式从Brushes类中获取画笔?

jch*_*huk 5 c# brush brushes

我有一个属性,允许将已知颜色的字符串名称发送到我的控件.酒店仅接受正确的已知颜色名称,如"红色"或"蓝色"

  private KnownColor _UseColor = KnownColor.Red;

    /// <summary>
    /// Gets or sets the name of the colour
    /// </summary>
    public string ColorName
    {
        get
        {
            return this._UseColor.ToString();
        }
        set
        {
            if (Enum.IsDefined(typeof(KnownColor), value))
                this._UseColour = (KnownColor)Enum.Parse(typeof(KnownColor), value);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用这个_UseColour枚举从.NET中的静态Brushes类中选择一个现有的画笔

Brush sysBrush = Brushes.FromKnownColor(this._UseColor);
e.Graphics.FillRectangle(sysBrush, 0, 0, 10, 10);
Run Code Online (Sandbox Code Playgroud)

而不是在控件被绘制时创建一个新的画笔

using (SolidBrush brsh = new SolidBrush(Color.FromKnownColor(this._UseColor)))
    e.Graphics.FillRectangle(brsh, 0, 0, 10, 10);
Run Code Online (Sandbox Code Playgroud)

有谁知道这是否可能,或者我每次都要创建一个新画笔?

Brushes.FromKnownColor不是Brushes班上的方法

Rud*_*ser 4

为什么不创建一次画笔并将其缓存以供以后使用?

在你的主课中:

private KnownColor _UseColor = KnownColor.Red;

/// <summary>
/// Gets or sets the name of the colour
/// </summary>
public string ColorName
{
    get
    {
        return this._UseColor.ToString();
    }
    set
    {
        if (Enum.IsDefined(typeof(KnownColor), value))
            this._UseColour = (KnownColor)Enum.Parse(typeof(KnownColor), value);
    }
}

private Dictionary<string, Brush> _knownBrushes = new Dictionary<string, Brush>();

public Brush ColorBrush
{
    get
    {
        if (!_knownBrushes.ContainsKey(_UseColor)) {
            _knownBrushes[_UseColor] = new SolidBrush(Color.FromKnownColor(this._UseColor));
        }

        return _knownBrushes[_UseColor];
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用它就像..

e.Graphics.FillRectangle(ColorBrush, 0, 0, 10, 10);
Run Code Online (Sandbox Code Playgroud)