如何获得所有钢笔和画笔的数组?

时间:2017-04-04 17:43:34

标签: c# winforms

我正在开发一个生成Mandelbrot集表示的应用程序。我已经开始工作了,看下面的图片,很酷的东西!

enter image description here

对于我正在使用这样的数组的颜色:

Pen[] pens = {
    Pens.Red,
    Pens.Green,
    Pens.Blue,
    Pens.Cyan,
    Pens.Magenta,
    Pens.Yellow
};

在我的代码中,我正在使用此数组使用以下代码段填充像素:

while(iteration > 6)
{
    iteration -= 6;
}

graphics.DrawRectangle(pens[iteration-1], rectangle);

这给了我正确的颜色(你可以反复看到颜色模式重复)

我想为我的代码添加更宽的颜色调色板,并使用全部 BrushesPens可用。

但是,当我们查看Pens文档(https://msdn.microsoft.com/en-us/library/system.drawing.pens(v=vs.110).aspx)时,您可以看到Pens类仅包含属性。

如何获得所有这些笔的数组,而不需要自己逐个颜色声明?这将占用大量的代码,在我看来,它似乎更容易完成。谢谢!

2 个答案:

答案 0 :(得分:1)

正如@stuartd所提到的,你会想要使用Reflection来获取这些。

var pens = typeof(Pens).GetProperties(BindingFlags.Static | BindingFlags.Public)
                       .Select(p => p.GetValue(null))
                       .OfType<System.Drawing.Pen>()
                       .ToArray();

上面的代码会返回一个Pen数组。请注意,您还可以获得Transparent,您可能希望保留或删除。

如果你交换Pen for Brush,上面的代码就可以了。

答案 1 :(得分:1)

你似乎对事情的运作方式存在误解。

是的,有一堆预定义的笔通常会避免程序必须创建&amp;摧毁钢笔。但是,您可以制作任何颜色的笔,而不仅仅是已定义的笔。因此,有1600万个可能的笔(尽管如果Windows没有尝试创建那么多笔,我会感到惊讶。)

获得所有预定义的笔不会获得所有可能的笔。