我正在使用面板绘制圆形等形状,但问题是,当我改变标签或最小化程序&然后最大化程序,然后绘制的每个东西都被删除。任何人都可以告诉我是什么原因?如何在Windows窗体的面板中绘制形状?
0
A
回答
0
原因是控制失效,然后重绘。
您应该捕获Paint
事件并重新绘制面板内所需的所有内容。
每次控制必须(部分完全)重新绘制时,会触发此事件。
用户评论后编辑:
当你的用户绘制的东西,你可以在形状(种类和各种coords)使用存储在List
和上Paint
事件,重绘列表中包含的从上到下的一切。
0
您绘制的任何东西(默认情况下)都不具有持久性,并且可能会丢失任何有效的窗口部分(掩盖并揭开,最小化,UAC提示等等) 要解决此问题,您需要记住你需要在Paint
事件中绘制并重画它
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));
}
您在绘画事件中完成所有绘图。要强制刷新,请致电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));
}
0
缓冲这样的: (你可以跳过重画的形式,通过形式负载迫使较大的位图调整。)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication10
{
public partial class Form1 : Form
{
Bitmap bitmap = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Redraw();
}
protected override void OnPaintBackground(PaintEventArgs e)
{
OnPaint(e);
}
protected override void OnPaint(PaintEventArgs e)
{
if (bitmap == null)
{
base.OnPaint(e);
}
else
{
e.Graphics.DrawImageUnscaled(bitmap, 0, 0);
}
}
private void Form1_Resize(object sender, EventArgs e)
{
Redraw();
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
Redraw();
this.Invalidate();
}
private void Redraw()
{
if (bitmap != null)
{
bitmap.Dispose();
bitmap = null;
}
bitmap = new Bitmap(this.Width, this.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bitmap))
{
g.Clear(Color.White);
// This is where you could use a List<Shape> etc...
g.DrawEllipse(Pens.Black, new Rectangle(10, 10, 20, 20));
g.DrawEllipse(Pens.Black, new Rectangle(20, 30, 20, 20));
g.DrawEllipse(Pens.Black, new Rectangle(50, 90, 30, 20));
}
}
}
}
相关问题
- 1. 如何在Windows窗体中的面板中绘制矩形时删除边距?
- 2. 如何使用Zedgraph库在windows窗体中绘制图形?
- 3. 如何在Visual Studio 2012中的C++ Windows窗体中编写绘画面板?
- 4. 在Windows窗体中绘制30fps图表
- 5. 如何用windows窗体打印面板
- 6. 如何保存我作为二进制在面板上绘制的形状
- 7. 在Windows窗体中旋转.NET面板
- 8. 如何在Windows负象限绘制矩形形状C#
- 9. 如何在Android中绘制形状
- 10. 如何在形状中绘制shapens?
- 11. 如何在JPanel中绘制形状?
- 12. 如何在MKMapView中绘制形状?
- 13. 如何在C++/CLI/Windows窗体中以25 FPS的面板更新图形?
- 14. 淡出面板 - Windows窗体
- 15. 如何在C#窗体中删除绘制的圆形?
- 16. 在不使用Windows窗体的情况下绘制C#图形
- 17. 面板上的绘图形状
- 18. 如何制作一个没有方形窗体形状的Windows应用程序?
- 19. 在窗体上绘制加载圆形
- 20. 在窗体上绘制多个圆形
- 21. Windows窗体在面板之间切换
- 22. Windows窗体的Windows XP控制面板控件
- 23. 在F中的Windows窗体中绘图#
- 24. 如何绘制形状如下的UIButton?
- 25. Windows窗体中的图形
- 26. 如何在python中绘制矩形的联合形状
- 27. 如何绘制System.Drawing.Bitmap形状的投影?
- 28. 如何绘制模糊的形状?
- 29. 将图形绘制到二级函数C#Windows窗体
- 30. 在UIImageView上绘制形状
在哪个事件中您正在绘制哪个对象? – Nighil