问题描述
]想用所有颜色的列表填充我的 ComboBox
.我期待着类似的东西:
]'d like to fill my ComboBox
with a list of all colors. I was expecting Something like:
CBcolor.DataSource = AllColor;
然后,我想像这样使用ComboBox:
Then I'd like to use my ComboBox like this:
Color selected = CBcolor.selectedvalue;
C_ObjetGraphique cercle = new dessin.Cercle(e.Location, selected, selected, 100);
cercle.Affiche();
ledessin.ajoute(cercle);
如何在我的 ComboBox
中显示颜色列表作为颜色选择器?
How can I Show list of colors in my ComboBox
as a color picker?
推荐答案
通常,您需要将颜色列表设置为组合框的数据源.您可能会列出一些预定义的颜色,例如Color.Red,Color.Green,Color.Blue;.您可以依赖 KnownColor
,或者可以使用反射来获取 Color
类型的 Color
属性.
In general you need to set the list of colors as data source of combo box. You may have a list of some predefined colors like Color.Red, Color.Green, Color.Blue; You may rely on KnownColor
, or you may use reflection to get Color
properties of Color
type.
在此示例中,我使用 Color
类型的颜色属性来显示如下所示的组合框:
In this example I use color properties of the Color
type to show a combo box like this:
获取颜色列表并设置组合框的数据源:
Get list of colors and set data source of combo box:
comboBox1.DataSource = typeof(Color).GetProperties()
.Where(x => x.PropertyType == typeof(Color))
.Select(x => x.GetValue(null)).ToList();
处理组合框的自定义绘图:
Handle custom draw of the combo box:
comboBox1.MaxDropDownItems = 10;
comboBox1.IntegralHeight = false;
comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.DrawItem += comboBox1_DrawItem;
然后输入 comboBox1_DrawItem
:
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
if (e.Index >= 0)
{
var txt = comboBox1.GetItemText(comboBox1.Items[e.Index]);
var color = (Color)comboBox1.Items[e.Index];
var r1 = new Rectangle(e.Bounds.Left + 1, e.Bounds.Top + 1,
2 * (e.Bounds.Height - 2), e.Bounds.Height - 2);
var r2 = Rectangle.FromLTRB(r1.Right + 2, e.Bounds.Top,
e.Bounds.Right, e.Bounds.Bottom);
using (var b = new SolidBrush(color))
e.Graphics.FillRectangle(b, r1);
e.Graphics.DrawRectangle(Pens.Black, r1);
TextRenderer.DrawText(e.Graphics, txt, comboBox1.Font, r2,
comboBox1.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
}
}
从组合框中获取所选颜色:
Get the selected color from combo box:
if(comboBox1.SelectedIndex>=0)
this.BackColor = (Color)comboBox1.SelectedValue;
这篇关于在ComboBox-拾色器中显示颜色列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!