把你的GDI绘图代码放在ONpAINT事件

解决方案 »

  1.   

    那不是Form一但load,整张图就画出来了?
    我想要得是单击某个按钮,然后一条边一条边的画出整张图。
      

  2.   

    事先定义一个BITMAP类型,如shadowImage,大小和你实际的图大小一致
    画的时候,画2份就是了。
    然后在你的ONPAINT事件里判断一下:
    如:
    if(this.shadowImage!= null)
       e.Graphics.DrawImage(this.shadowImage,0,0);
      

  3.   

    试过了,还是不行啊。
    这个定义的shadowImage和我画的图有什么联系吗?
      

  4.   

    加一个bool变量,如果已经画完就赋为true,如果是true,就在窗体重绘时重绘这张图,如果不是,就不画。
      

  5.   

    Bitmap img = new Bitmap(this.Size.Width,this.Size.Height);
    Graphics g = Graphics.FromImage(img);//1
    g.SmoothingMode = SmoothingMode.HighQuality;
    Point p1 = new Point(2,2);
    Point p2 = new Point(p1.X+this.Width-4,p1.Y);
    Point p3 = new Point(p2.X,p2.Y+this.Height-4);
    Point p4 = new Point(p1.X,p3.Y);
    g.DrawPolygon(new Pen(Color.Orange,1),new Point[]{p1,p2,p3,p4});//2
    Graphics gg = Graphics.FromHwnd(this.Handle);//3
    gg.DrawImage(this.img,0,0); //4
      

  6.   

    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
    if(this.img != null)
       e.Graphics.DrawImage(this.shadowImage,0,0);

    }
      

  7.   

    http://www.syncfusion.com/FAQ/WinForms/这样干脆些
      

  8.   

    还是不行,我的图是画在pictureBox里的,我要画的是最小生成树,每单击一次button,就画出一条边。
      

  9.   

    没有问题啊,你画线的方法里:
       先画在定义好的那个imageShadow上的,
    Graphics g = Graphics.FromImage(imageShadow);
    //todo 加入你实际画线的方法
    ...
    //最后:
       Graphics gg = Graphics.FromHwnd(你的pictureBox.Handle);//
       gg.DrawImage(this.imageShadow,0,0); //
      

  10.   

    我照你的一做,原来问题还是没有解决
    而且,一按button,整棵树就一下子画出来了,不再像原来那样按一下button画一条边了
    到底怎么回事啊??我晕了