当前位置:  开发笔记 > 编程语言 > 正文

PictureBox调整大小和绘画问题

如何解决《PictureBox调整大小和绘画问题》经验,为你挑选了1个好方法。

我想在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();
    }
}

}

这个小应用程序显示了问题.它只绘制一个椭圆,但当然我的绘图代码要复杂得多......

当我调整表格大小时,任何想法椭圆消失的原因????



1> Mark Heath..:

你为什么用PictureBox?我会UserControl为你的图表创建一个并在其Paint方法中绘制椭圆,只使用它的当前大小.在它的构造函数中,将其设置为双缓冲和绘制方法中的所有绘制.

this.SetStyle(ControlStyles.DoubleBuffer | 
  ControlStyles.UserPaint | 
  ControlStyles.AllPaintingInWmPaint,
  true);

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有