private void Form1_Load(object sender, EventArgs e)
        {
            Graphics g = this.CreateGraphics();
            Pen pen1 = new Pen(Color.Red, 5);
            g.DrawRectangle(pen1,10,10,30,50);
        }为什么矩形没画出来呢

解决方案 »

  1.   

    放到Paint里面能行,我就想知道,为什么放到Load事件里不行,窗口打开,就要执行Load事件,为什么不行,,谢谢
      

  2.   

    不需要重绘啊,我在Form启动之前,就画好了
      

  3.   

    关键在 Shown 事件里界面会重绘Form 显示出来之后,也还会发生重绘。比如最大,最小化。别的窗体遮盖等等等所以你要保证你画的都能看到,就必须要OnPaint事件里去做。
      

  4.   

    Load事件是在Form窗口弹出之前触发的,而在窗口弹出之前,没有有绘图画面的,也就是没有Graphics对象,所以画不出。这样理解不知正确不?
      

  5.   

    是画了,但又被人擦了。Load里画的始终会被Shown擦掉罢了。
      

  6.   


    不正确。窗体弹出之前,你的窗体初始化已经完成,窗体已经被分配了句柄,所以是可以产生绘图对象的。但是弹出后没有图像,是因为弹出触发了窗体重绘,也就是Paint事件,由于没有重写OnPaint,导致本次绘图直接中止,所以你的窗体没有图像产生。
      

  7.   

    Windows的GDI必须在拥有屏幕资源的时候才可以有效。在FormLoad的时候,窗体还没有得到
    绘画资源。所以不可以画出。但如果在窗体已经创建并显示完了之后,如果你再调用FormLoad事件,这时一定可以画出。如果想让窗体在和其他窗体交互后,还能画出,则建议使用Paint事件。
    Good Luck!
      

  8.   


    13L是错误的,如果有疑问,就在Form_Load里创建一个Graphics对象试试,然后在OnPaint中加断点,这样就可以看出事件的具体执行顺序。
      

  9.   

    Form_Load里面你画了一次矩形
    然后Patint事件会一直执行,绘制你的窗体,但Patint事件里面没有画那个矩形,所以就没有了
      

  10.   

    控件表面的图形并不是持久的,需要由代码进行维护,而维护的代码通常写在Paint事件或OnPaint方法的重载里,所以在Load事件发生时,即使真的被画上去了,也会被立刻抹掉。
    请参考下面两个帖子:
    http://topic.csdn.net/u/20110425/16/0c4d8ae9-62d7-4a8d-bcb3-824bb39351a5.html
    http://topic.csdn.net/u/20110425/17/bec41b66-8a3e-465e-9c72-b03feedf1172.html