如何在同一面板中绘制多个椭圆

  • 本文关键字:绘制 c# graphics
  • 更新时间 :
  • 英文 :


我正试图在同一个面板中绘制一些椭圆,协调员由鼠标单击确定。这是我的代码,这个代码只能画一个圆。较新的圆总是更新面板上较旧的圆。所以总是只有一个圆圈。

private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            x = e.X;
            y = e.Y;
            panel1.Invalidate();
        }
        Graphics g;
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            g = panel1.CreateGraphics();
            g.FillEllipse(Brushes.Red, x,y, 10, 10);
        }

Winforms图形基本规则#1:永远不要使用control.CreateGraphics!永远不要尝试缓存Graphics对象!使用Graphics g = Graphics.FromImage(bmp)绘制到Bitmap bmp中,或者在控件的Paint事件中使用e.Graphics参数。。

您可以通过执行最小化/最大化序列来测试图形的持久性。。

正确的方法是保留一个要绘制的事物列表,每当该列表更改Invalidate时,您就可以绘制控件。所有绘制都应该在Paint事件中,在那里使用e.Graphics

这将让你画许多圆圈:

List<Point> points = new List<Point>();   // List<T> is wonderful !
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
     points.Add(e.Location);
     panel1.Invalidate();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
     g = e.Graphics;    // only ever use this one for persistent graphics!!
     foreach( Point pt in points)
        g.FillEllipse(Brushes.Red, pt.X, pt.Y,  10, 10);
}

通过将其全部删除

points.Clear();

通过删除最后一个

points.Remove(points.Last());

对于其他尺寸,请存储List<Rectangle>。对于更复杂的绘图,创建一个自己的DrawAction类来容纳笔、颜色甚至旋转和其他形状等。

相关内容

  • 没有找到相关文章

最新更新