我有一個窗體窗體,我希望用戶指定刷子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