我有一个窗体窗体,我希望用户指定刷子system.drawing.brush的颜色,然后我的应用程序消耗这本地。有很多笔刷颜色,我想知道是否有可能枚举所有可能的颜色组合?简单的方法来枚举类属性,然后指定该属性
我可以用它们填充组合框。那么第二部分就是以编程方式指定画笔属性,而不必执行查找表。
我有一个窗体窗体,我希望用户指定刷子system.drawing.brush的颜色,然后我的应用程序消耗这本地。有很多笔刷颜色,我想知道是否有可能枚举所有可能的颜色组合?简单的方法来枚举类属性,然后指定该属性
我可以用它们填充组合框。那么第二部分就是以编程方式指定画笔属性,而不必执行查找表。
对于色彩名称的列表,你可以使用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);
最好的选择是宣布像public enum BrushColor{...}
这样的枚举器,列出所有的颜色。然后,使用此枚举器,您可以自动填充组合框,然后根据用户输入确定颜色也很容易(switch
块)。
你可以使用反射得到的颜色列表:
Type brushes = typeof(Brushes);
var colorList = from color in brushes.GetProperties() select color.Name;
结合这段代码在一开始,你可以实现你想要的结果中提到的逻辑。
感谢您的回复,但我想避免必须这样做,如果我可以只是研究如何设置静态刷类的属性与变量,所以我可以传递给DrawString因为似乎有很多关于如何枚举属性的信息,并将它们放入一个不错的列表中。 – Stevie187
查看edtied的答案。 –
我必须将colorNames的数据类型更改为列表,以使组合框可以接受为数据源,但在其他方面是完美的,谢谢。 –
Stevie187