我想在Winform应用程序中显示一些图形,它将是一个股票图表绘图工具。我想(但我不确定......)我必须使用PictureBox,并使用System.Drawing.Graphics类的绘图基元来绘制图表。我已经开始编码了,现在它或多或少都有效,但我对调整大小功能有一个问题,如下所示:当我调整整个表单大小时,我看到程序显示图形然后立即清除它。当我停止鼠标移动(不释放鼠标按钮)时,图形消失了!?!?
我做了一个小测试环境来演示这个bug: 使用VS2005,创建一个新的C#Windows窗体应用程序,只向窗体添加一个PictureBox。 将PictureBox的锚点设置为left,top,right和bottom。添加两个事件处理程序,Resize到PictureBox,以及Paint to the Form。
namespace PictureBox_Resize {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
Ellipse_Area = this.pictureBox1.Size;
}
private Pen penBlack = new Pen(Color.Black, 1.0f);
private Size Ellipse_Area;
private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g = this.pictureBox1.CreateGraphics();
g.DrawEllipse(penBlack, 0, 0, Ellipse_Area.Width, Ellipse_Area.Height);
}
private void pictureBox1_Resize(object sender, EventArgs e) {
Control control = (Control)sender;
Ellipse_Area = control.Size;
this.pictureBox1.Invalidate();
}
}
}
这个小应用程序显示了问题。它只绘制一个椭圆,但当然我的绘图代码要复杂得多......
当我调整Form ????
时,知道为什么椭圆会消失答案 0 :(得分:6)
为什么使用PictureBox
?我会为您的图表创建一个UserControl
,并使用其当前大小在其Paint
方法中绘制椭圆。在它的构造函数中,将它设置为双缓冲和绘制方法中的所有绘画。
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
答案 1 :(得分:1)
据我记得,在我的C ++时代 - 我做了大量这样的图像 - 你需要调用重绘方法 - 或者覆盖它以适合你的行为。