我想在Winform应用程序中显示一些图形,它将是一个股票图表绘图工具.我想(但我不确定......)我必须使用PictureBox,并使用System.Drawing.Graphics类的绘图基元来绘制图表.我已经开始编码了,现在它或多或少都有效,但我对调整大小功能有问题,如下所示:当我调整整个表单大小时,我看到程序显示图形然后立即清除它.当我停止鼠标移动(不释放鼠标按钮)时,图形消失了!?!?
我做了一个小测试环境来演示这个bug:使用VS2005,创建一个新的C#Windows Forms应用程序,只在表单中添加一个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(); } }
}
这个小应用程序显示了问题.它只绘制一个椭圆,但当然我的绘图代码要复杂得多......
当我调整表格大小时,任何想法椭圆消失的原因????
你为什么用PictureBox
?我会UserControl
为你的图表创建一个并在其Paint
方法中绘制椭圆,只使用它的当前大小.在它的构造函数中,将其设置为双缓冲和绘制方法中的所有绘制.
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);