private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen pen1 = new Pen(Color.Red);
            g.DrawLine(pen1, 30, 30, 100, 100);//用笔pen1从点(30,30)到(100,100)画直线
            Point p1 = new Point(30, 40);
            Point p2 = new Point(100, 110);
            g.DrawLine(pen1, p1, p2);//用笔pen1从点(30,40)到(100,110)画直线
        }两个问题:
1:上面代码为什么没成功画出直线
2:为什么要用Paint事件,MSDN上解释的Paint事件是:在重绘控件时发生....什么叫做重绘控件?这个Paint事件重要吗?哪些地方需要用到
3:谢谢!!!!

解决方案 »

  1.   

    1.没有画成功? 代码没有问题,应该可以画成功的,你看看是不是其他的控件遮挡了,或者是颜色配比,本来窗体就是红色系的,你再画红线,你没看清楚。
    2.Paint重绘控件,是指,对控件进行重新绘制,比如本来Panel 没有阴影的效果,你通过在通过paint事件,在panel上面画上阴影。一句话,就是给控件搞造型。
    3.不可以,有问题继续讨论。
      

  2.   

    还是两个问题
    1:我的真的没有画出直线,改变直线的颜色,还是看不到,你那边画出来了吗?
    2:既然,要改变控件的造型,把原来的代码修改,就行了啊,为什么要重绘,无需Paint啊
      

  3.   

    Graphics g = e.Graphics;这句话不要,直接使用e.Graphics
      

  4.   

    我的绘制出来了,你新建一个独立工程实施,估计是其他代码影响这部分了
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                Pen pen1 = new Pen(Color.Red);
                g.DrawLine(pen1, 30, 30, 100, 100);//用笔pen1从点(30,30)到(100,100)画直线
                Point p1 = new Point(30, 40);
                Point p2 = new Point(100, 110);
                g.DrawLine(pen1, p1, p2);//用笔pen1从点(30,40)到(100,110)画直线        }
      

  5.   

    1:上面代码为什么没成功画出直线
    上面代码在我这里能画出直线,请确定你这段代码被调用了,有可能你的Paint事件被重置了
    2:为什么要用Paint事件,MSDN上解释的Paint事件是:在重绘控件时发生....什么叫做重绘控件?这个Paint事件重要吗?哪些地方需要用到
    Paint事件应该是相应WM_PAINT消息的,这个消息在窗口遮挡区域发生变化,窗口大小发生变化时触发,移动窗口不会触发。
      

  6.   

    真奇怪,我没画出来........
     public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {        }
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                Pen pen1 = new Pen(Color.Red);
                g.DrawLine(pen1, 30, 30, 100, 100);//用笔pen1从点(30,30)到(100,100)画直线
                  Point p1 = new Point(30, 40);
                Point p2 = new Point(100, 110);
                g.DrawLine(pen1, p1, p2);//用笔pen1从点(30,40)到(100,110)画直线
              }
        }
    这是全部代码
      

  7.   

    Graphics g = e.Graphics;
    光标定在这一行上按F9
    然后按F5
      

  8.   


    代码没有问题,我猜你很可能 private void Form1_Paint(object sender, PaintEventArgs e)
            {}
    是你自己敲进去的。
    解决办法:
    找到文件Form1.Designer.cs中的From1,在其中添加this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);若你找不到Form1.Designer.cs,直接在Form1的构造函数里加this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);也行。
    public Form1()
            {
                InitializeComponent();
                this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
            }
      

  9.   

    可以画出来,很明显 你的这个事件根本就没执行。
    看看你的窗体是否正确添加了此事件。你不会是直接将别人的代码COPY过来的吧,尝试在FORM构造函数或者Load函数中注册Paint事件
    添加这一句
    this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
      

  10.   

    g.DrawLine(pen1, 30, 30, 100, 100);
    改称
    g.DrawLine(pen1, 0, 0, 30, 30); 看看,代码没有问题,看看是不是画到窗口的外面去了
      

  11.   

    直接override OnPaint事件就可以,为什么写这么麻烦
      

  12.   

    不好意思,确实是粘贴进去的,事件没执行。这下解决了,谢谢,
    现在进行第二个问题:
    2:为什么要用Paint事件,MSDN上解释的Paint事件是:在重绘控件时发生....什么叫做重绘控件?这个Paint事件重要吗?哪些地方需要用到