1:Paint事件到底是个什么东东?MSDN。为什么好多绘图都有Paint事件?:
2:在重绘控件时发生?啥意思?一直搞不懂!!!

解决方案 »

  1.   

    private void Form1_Load(object sender, EventArgs e)
            {
                Graphics graphics = this.CreateGraphics();
                Pen pen1 = new Pen(Color.Red);
                graphics.DrawLine(pen1, 10, 10, 100, 100);
            }
    为什么上面的Load事件,不能画出直线?而下面的Paint事件能画出
     private void Form1_Paint(object sender, PaintEventArgs e)
            {
                Graphics graphics = this.CreateGraphics();
                Pen pen1 = new Pen(Color.Red);
                graphics.DrawLine(pen1, 10, 10, 100, 100);
            }
    Load事件不是启动窗口,就执行的事件吗?为什么不能画出直线?
    谢谢!!!
      

  2.   

    load能画出,只不过在厨房onpaint事件后,就会被擦出,所以画线过程要你写在onpaint中,不要写到其他地方
      

  3.   

     private void Form1_Paint(object sender, PaintEventArgs e)
            {
                MessageBox.Show("uiuiu");
            }
    这个不是重绘控件,但还是发生了,不断的弹出对话窗口...
    为什么要不断的弹出呢,关不了对话窗口
      

  4.   

    当你的窗体A被另一个窗体B遮挡时,被遮挡的部分会在B窗体移开时重新绘制,这时就会触发Paint事件,如果你的控件的一部分刚好在这个区域内,控件的Paint事件也会被触发。
    Paint事件参数PaintEventArgs的ClipBounds属性就是这个需要重绘区域的位置和大小,如果要绘制的图形较大或较复杂,你可以先测试要绘制的内容是否在这个区域内,如果在这个区域内才重新绘制,这样可以节约一些绘制的开销。
      

  5.   

     private void Form1_Paint(object sender, PaintEventArgs e)
            {
                Graphics graphics = e.Graphics;
                Pen pen1 = new Pen(Color.Red);
                graphics.DrawLine(pen1, 10, 10, 100, 100);
            }
    可是,上面代码,我的窗口,并没有变“脏”,为什么还是触发了Paint事件呢?
      

  6.   

    Paint事件一般都由外部触发,如果要以代码的方式触发可以使用Invalidate、Update或Refresh方法,你的这段代码说明不了什么问题。你所说的没有变脏不知道是在什么环境下,是否鼠标键盘都没有动,据我所知如果窗体放着不动,只是移移鼠标是不会触发Paint事件的,除非你安装了翻译软件并开启屏幕取词的功能。
      

  7.   

    没有变脏,主要指这些啊:
    窗口更改了大小
    被其他窗口覆盖(部分覆盖或完全覆盖)
    最小化后又还原
    菜单被打开再关闭
    打开对话框再关闭
    ....
    Paint事件触发,不会没有条件的吧
      

  8.   

    用paint是为了不需要自己去"主动"绘制,则由系统去根据需要绘制.但paint本质上和绘制没有任何关系,只是提供对graphics的主动事件引发.
      

  9.   

    是啊,Paint由系统根据需要绘制........但
     private void Form1_Paint(object sender, PaintEventArgs e)
      {
      Graphics graphics = e.Graphics;
      Pen pen1 = new Pen(Color.Red);
      graphics.DrawLine(pen1, 10, 10, 100, 100);
      }
    有什么需要呢?但还是画出了直线,难道Paint是无条件的绘制吗?
      

  10.   

    如果是XP系统,由于是所有窗口在一个层中渲染,所以只要屏幕中任何地方有一点变化都导致paint