protected override void OnPaint(PaintEventArgs e)
{
if (comboBox1.Text == "Circle")
{
e.Graphics.FillEllipse(Brushes.Red, new Rectangle(105, 120, 64, 64));
}
if (comboBox1.Text == "Rectangle")
{
e.Graphics.FillRectangle(Brushes.Red, new Rectangle(105, 120, 75, 50));
}
if(comboBox1.Text == "Triangle")
{
Point[] points = { new Point(140, 110), new Point(230, 190), new Point(50, 190) };
e.Graphics.FillPolygon(Brushes.Red, points);
}
}
我已经在上面创建了这些形状,并且它们在组合框中,但是我试图获得它,所以我的第二个组合框将改变形状的颜色,有什么办法吗?去做这个?我似乎无法在任何地方找到它。 第二个组合框包含红色,绿色,蓝色,自定义颜色。我有它所以颜色调色板出现但我不知道如何选择时将其设置为形状。
我如何参考形状并改变画笔颜色是我努力的部分
答案 0 :(得分:0)
正如Hans Passant已经指出的那样:您需要使用SolidBrush对象来设置自定义颜色。这在帖子convert from Color to brush中有所描述。
在您的情况下,我会按以下方式填充颜色ComboBox
:
comboBox_Colour.DataSource = new List<Color> { Color.Red, Color.Blue, Color.Yellow, Color.Green };
现在,在OnPaint
事件中,您可以检查是否已选择任何项目,然后直接从Color
SelectedItem
抓取comboBox_Colour
。然后将其插入SolidBrush
对象的构造函数中,并将SolidBrush
提供给Fill...
方法。它会起作用,因为SolidBrush
继承自Brush
public sealed class SolidBrush : Brush
protected override void OnPaint(PaintEventArgs e)
{
if (comboBox_Shape.SelectedIndex != -1 && comboBox_Colour.SelectedIndex != -1)
{
Color c = (Color)comboBox_Colour.SelectedItem;
SolidBrush sb = new SolidBrush(c);
if (comboBox_Shape.Text == "Circle")
{
e.Graphics.FillEllipse(sb, new Rectangle(105, 120, 64, 64));
}
else if (comboBox_Shape.Text == "Rectangle")
{
e.Graphics.FillRectangle(sb, new Rectangle(105, 120, 75, 50));
}
else if (comboBox_Shape.Text == "Triangle")
{
Point[] points = { new Point(140, 110), new Point(230, 190), new Point(50, 190) };
e.Graphics.FillPolygon(sb, points);
}
}
}
修改强>
如果我在这里提供的颜色选择不够,您可以将结构Color
必须提供的所有颜色转储到comboBox_Colour
:
List<Color> allColours = typeof(Color).GetProperties(
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.Public)
.Select(x => (Color)x.GetValue(null)).ToList();
comboBox_Colour.DataSource = allColours;