用C#写个picturebox,代码如下:
private void paint2(){
Graphics g = pictureBox.CreateGraphics();
g.Clear(Color.White);
Point p1 = new Point(10,0);
Point p2 = new Point(10, 20);
g.DrawLine(new Pen(Color.Blue, 2), p2, p1);
}
无论将该函数在Form_Load中调用还是在Paint事件中调用(窗口最小化后再出现,paint2调用但是没有画出),都画不出这条蓝色的直线。
后来想了一下原因:这个方法是直接在picturebox上画图,以上两种情况有一个共同点,就是窗口还没有显示出来,这就导致方法调用后,后面又被其他方法覆盖掉了,或者说窗口还不可见,画不上。以上都有可能,我也只是猜测。
为了避免这个问题,我们不要直接在picturebox上画,可以先画在一张位图上,然后将位图赋值给picturebox.Image,这个属性,这样我们画的东西就丢不了了,代码修改为:
private void paint2()
{
Bitmap b = new Bitmap(this.pictureBox.Width, this.pictureBox.Height);
Graphics g = Graphics.FromImage((System.Drawing.Image)b);
Point p1 = new Point(10,0);
Point p2 = new Point(10, 20);
g.DrawLine(new Pen(Color.Blue, 2), p2, p1);
this.pictureBox.Image = b;
}