2017-07-19 65 views
0

我有一个窗体窗体,我希望用户指定刷子system.drawing.brush的颜色,然后我的应用程序消耗这本地。有很多笔刷颜色,我想知道是否有可能枚举所有可能的颜色组合?简单的方法来枚举类属性,然后指定该属性

我可以用它们填充组合框。那么第二部分就是以编程方式指定画笔属性,而不必执行查找表。

回答

0

对于色彩名称的列表,你可以使用Reflection

Type colorType = typeof(System.Drawing.Color); 

PropertyInfo[] propInfoList = colorType.GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public); 

var colorNames = propInfoList.Select(c => c.Name); 

使用该列表来填充组合框

然后,一旦用户选择的颜色,你可以使用以下命令来创建一个刷:

var brushColor = Color.FromName(selectedColorFromCombo); 

var brush = new SolidBrush(brushColor); 
+1

我必须将colorNames的数据类型更改为列表,以使组合框可以接受为数据源,但在其他方面是完美的,谢谢。 – Stevie187

0

最好的选择是宣布像public enum BrushColor{...}这样的枚举器,列出所有的颜色。然后,使用此枚举器,您可以自动填充组合框,然后根据用户输入确定颜色也很容易(switch块)。

你可以使用反射得到的颜色列表:

Type brushes = typeof(Brushes); 
var colorList = from color in brushes.GetProperties() select color.Name; 

结合这段代码在一开始,你可以实现你想要的结果中提到的逻辑。

+0

感谢您的回复,但我想避免必须这样做,如果我可以只是研究如何设置静态刷类的属性与变量,所以我可以传递给DrawString因为似乎有很多关于如何枚举属性的信息,并将它们放入一个不错的列表中。 – Stevie187

+0

查看edtied的答案。 –