如何在窗体面板中绘制形状?

Des*_*ire 0 c# visual-studio-2010 winforms

我正在使用面板绘制像圆形的形状,但问题是当我更改制表符或最小化程序然后最大化程序时,然后删除所有绘制的东西.谁能告诉我是什么原因?

Lar*_*ech 5

由于您没有发布任何代码,因此您的所有读者都会猜测.我的猜测是你最有可能使用CreateGraphics,这可能是一个错误.

您的面板的绘制事件应该如下所示:

private void panel1_Paint(object sender, PaintEventArgs e) {
  e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
  e.Graphics.FillEllipse(Brushes.Red, new Rectangle(10, 10, 32, 32));
}
Run Code Online (Sandbox Code Playgroud)

您可以在绘画事件中完成所有绘图.要强制刷新,只需调用即可panel1.Invalidate().

如果绘制到位图,您可以像这样处理它:

Bitmap bmp = new Bitmap(500, 500);

private void button1_Click(object sender, EventArgs e) {
  using (Graphics g = Graphics.FromImage(bmp)) {
    g.SmoothingMode = SmoothingMode.AntiAlias;
    g.Clear(Color.White);
    g.FillEllipse(Brushes.Red, new Rectangle(10, 10, 32, 32));
  }
  panel1.Invalidate();
}

private void panel1_Paint(object sender, PaintEventArgs e) {
  e.Graphics.DrawImage(bmp, new Point(0, 0));
}
Run Code Online (Sandbox Code Playgroud)