gpt4 book ai didi

c# - 如何将两个色圈保持在一起

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:37 25 4
gpt4 key购买 nike

我正在编写的这个小程序的目标是在选中 radiobutton1 时绘制一个红色圆圈,在选中 radiobutton2 时绘制一个黑色圆圈。

下面是我的代码,此代码的问题是当检查radiobutton1时,它确实绘制了红色圆圈,但是如果我单击radiobutton2,则所有红色圆圈将变成黑色。然后如果再次选中 radiobutton1,所有的点将再次变为红色。

如何在面板上保留两个色环?

List<Point> points = new List<Point>();

Graphics g;
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
points.Add(e.Location);
panel1.Invalidate();
}

private void panel1_Paint(object sender, PaintEventArgs e)
{
int count = 0;
if (radioButton1.Checked)
{
g = e.Graphics;
while (count < points.Count())
{
g.FillEllipse(Brushes.Red, points[count].X, points[count].Y, 10, 10);
count++;
}
}
else if (radioButton2.Checked)
{
g = e.Graphics;
while (count < points.Count())
{
g.FillEllipse(Brushes.Black, points[count].X, points[count].Y, 10, 10);
count++;
}
}
}

最佳答案

图形在 Windows 窗体中的工作方式是,Paint 方法重绘整个面板。

您已经在每次执行 paint 方法时绘制每个点:这是正确的。

但是您无法记住哪个点应该是哪种颜色,因此在绘画时您需要继续的就是单选按钮的当前值。添加圆圈时,您需要某种方式来记录当前颜色。

一种方法是定义一个 Circle 类来存储圆的位置颜色:

class Circle
{
public Point Location { get; set; }
public Brush Fill { get; set; }
}

然后代替 points作为List<Point> , 它可以是 List<Circle> , 当您看到鼠标单击时,您可以添加一个新的 Circle而不是 Point :

var circle = new Circle()
{
Location = e.Location,
Fill = radioButton1.Checked ? Brushes.Red : Brushes.Black
};
points.Add(circle);

当你画画的时候,你可以在画的时候检查每个圆圈的颜色——你所要做的就是:

foreach (var circle in points)
{
e.Graphics.FillEllipse(circle.Fill, circle.Location.X, circle.Location.Y, 10, 10);
}

请注意,您不需要成员(member)级别 Graphics g - 保留 Graphics 是个坏主意Paint 之后的对象方法已经完成。它不一定以后仍然有效。始终只使用 e.Graphics .

我也替换了你的while使用更简单的循环 foreach .

关于c# - 如何将两个色圈保持在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36925551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com