Pen p = new Pen(Color.Red, 1);
Point p1=...;
Point p2=...;
  Graphics gr;
  gr.DrawLine(p,p1,p2);为什么总提示:使用了未赋值的局部变量“gr”
我用了gr=this.CreateGraphics(); 但会要求创建:        private Graphics CreateGraphics()
        {
            throw new Exception("The method or operation is not implemented.");
        }
难道因为我重写了redraw?  我现在就想画这个线,怎么画?

解决方案 »

  1.   

    就用gr=this.CreateGraphics(你窗体的句柄);
    gr.DrawLine(p,p1,p2);
    这样就可以啊,我都试过的
      

  2.   

    你那个this是什么类?
    就是调用CreateGraphics()创建Graphics 画
      

  3.   

    Pen p = new Pen(Color.Red, 1); 
    Point p1=...; 
    Point p2=...; 
      Graphics gr=this.CreateGraphics(); 
      gr.DrawLine(p,p1,p2); 
    这样就不就可以了
      

  4.   

    首先要确认你想在什么上画线,
    可以使用Graphics.FromHwnd,Graphics.FromHdc,Graphics.FromImage方法创建Graphics对象,然后绘制
      

  5.   

    如果好用,我就不用提问是吧...
    用了:gr=this.CreateGraphics(); 
    会要求我重写:        private Graphics CreateGraphics()这就是不是系统里自带那个函数了...这个线我就没画出来
      

  6.   


      Graphics gr; 
      gr.DrawLine(p,p1,p2); //为什么总提示:使用了未赋值的局部变量“gr” //因为你没有创建对象graphics实例对象,加上gr=this.CreateGraphics();肯定没有问题 
      

  7.   

    Graphics对象是你绘图的“上下文”对象,它表示了你绘制的图形将在哪个窗口的哪些区域。
    你的代码中:
    Pen p = new Pen(Color.Red, 1); 
    Point p1=...; 
    Point p2=...; 
      Graphics gr; 
      gr.DrawLine(p,p1,p2); gr对象是未经初始化的,所以系统编译会提示那个错误。要解决这个编译错误很简单:
    Graphics gr = null;
    但很显然这并不是你的本意,很有可能你是要在某个窗口上绘制,或者在某个自己的内存中Grphics,因此问题的关键是解决这个Graphics对象的值的问题。
    可能的做法是:
    一、直接从某个窗口得到(this是窗口)
    Graphics g =this.CreateGraphics();
    g.Dispose()
    二、从某个Graphics对象得到一个复制品(做双缓冲用之类的)
    BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
    BufferedGraphics bgr = currentContext.Allocate(SomeGraphics, SomeClipRectangle);
    Graphics gr= bgr.Graphics;
    这样就得到一个以SomeGraphics以基准和一个绘制对象了。
    另外你使用这个方法的上下文环境可能提供了这样的参数,比如在OnPaint方法调用此函数时,OnPait带Graphics参数。具体的Graphics对象的获取可参考一下这里:
    http://blog.programfan.com/article.asp?id=17249
      

  8.   

     Graphics gr; 
    gr是你要画图的落笔点,现在你没有定义,所以报错.
    比如你要画在窗体上,还是某个bmp上,或者别的应用程序上,或者桌面上等等,你必须指定一个地方.(返回一个句柄)
      

  9.   

    public class DrawLine
    {
            public void Draw(Graphics g)
            {
              
                Pen pen = new Pen(Color, PenWidth);            g.DrawLine(pen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y);            pen.Dispose();
            }
    }窗体:
      Graphics gr=this.CreateGraphics(); 
      new DrawLine().Draw(gr);
      

  10.   

                Form2 f2 = new Form2();
                IntPtr i = f2.Handle;
                Graphics g = Graphics.FromHwnd(i);
    Pen p = new Pen(Color.Red, 1); 
    Point p1=...; 
    Point p2=...; 
      g.DrawLine(p,p1,p2); 
      

  11.   

    你可以这样,从UserControl继承,然后重写OnPaint事件,该事件的e.Graphics就是Graphics对象
    另外,你可以到codeproject上搜索一下DrawTools,这个例子就是将绘图集成到一个控件中
      

  12.   

    Graphics对象是你绘图的“上下文”对象,它表示了你绘制的图形将在哪个窗口的哪些区域。 
    你的代码中: 
    Pen p = new Pen(Color.Red, 1); 
    Point p1=...; 
    Point p2=...; 
      Graphics gr; 
      gr.DrawLine(p,p1,p2); gr对象是未经初始化的,所以系统编译会提示那个错误。要解决这个编译错误很简单: 
    Graphics gr = null; 
    但很显然这并不是你的本意,很有可能你是要在某个窗口上绘制,或者在某个自己的内存中Grphics,因此问题的关键是解决这个Graphics对象的值的问题。 
    可能的做法是: 
    一、直接从某个窗口得到(this是窗口) 
    Graphics g =this.CreateGraphics(); 
    g.Dispose() 
    二、从某个Graphics对象得到一个复制品(做双缓冲用之类的) 
    BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current; 
    BufferedGraphics bgr = currentContext.Allocate(SomeGraphics, SomeClipRectangle); 
    Graphics gr= bgr.Graphics; 
    这样就得到一个以SomeGraphics以基准和一个绘制对象了。 
    另外你使用这个方法的上下文环境可能提供了这样的参数,比如在OnPaint方法调用此函数时,OnPait带Graphics参数。 具体的Graphics对象的获取可参考一下这里: 
    http://blog.programfan.com/article.asp?id=17249
      

  13.   

    用了9楼那个http://blog.programfan.com/article.asp?id=17249窗体:
            private void button4_Click(object sender, EventArgs e)
            {
                Class1 ab=new Class1();
                ab.a();
            }Class:    public class Class1
        {
            public void a()
            {
                Graphics gr;
                Pen myPen = new Pen(Color.Red, 2);
                Form1 s = new Form1();
                gr = Graphics.FromHwnd(s.Handle);
                gr.DrawLine(myPen, 30, 60, 150, 60);        }
        }画不出来...
      

  14.   

    你先在窗体里面定义一个public Graphics g=null;
    如果在Class里面
                Form1 f2 = new Form1();
                f2.Show();
                f2.g = f2.CreateGraphics();
                f2.g.DrawLine(new Pen(Color.Red), 100, 5, 10, 100);
      

  15.   

    不能在类里直接画么因为现在的点都是写的常数,真正在程序里中个参数啊...就是DrawLine(pen ,point ,point)后两个变量这不是还得建全局的传回来,多麻烦....
      

  16.   

    那你就
                Form2 f2 = new Form2();
                f2.Show();
                f2.CreateGraphics().DrawLine(new Pen(Color.Red), 100, 5, 10, 100);
      

  17.   

    不是啊在窗体上调用了一个方法a,a又调用了方法b,b又调用了c ...反正,最后才到这个函数,用全局变量返回值,我觉得不可行...
      

  18.   

    在窗体上直接画也不太可能...我得不到那2个点point
      

  19.   

    ...窗体方法a  调用类里方法b  类里方法b调用类里方法c   类里方法c算出这2个点 现在就是 类里方法C 没直接画出这个线
      

  20.   

    你为什么要在类里画呢?你直接调用方法把要画的点计算出来不就行了?
    你自己定义个类。类里有p1,p2两个point,要是愿意把pen也加进去。最后把这个对象作为结果返回回来,你就可以根据这个类里的属性画点了。你在你的form里是可以得到这个Graphics的。
      

  21.   

    gr对象是未经初始化的,所以系统编译会提示那个错误。要解决这个编译错误很简单:
    Graphics gr = null;
    但很显然这并不是你的本意,很有可能你是要在某个窗口上绘制,或者在某个自己的内存中Grphics,因此问题的关键是解决这个Graphics对象的值的问题。
    可能的做法是:
    一、直接从某个窗口得到(this是窗口)
    Graphics g =this.CreateGraphics();
    g.Dispose()
    二、从某个Graphics对象得到一个复制品(做双缓冲用之类的)
    BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
    BufferedGraphics bgr = currentContext.Allocate(SomeGraphics, SomeClipRectangle);
    Graphics gr= bgr.Graphics;
    这样就得到一个以SomeGraphics以基准和一个绘制对象了。
    另外你使用这个方法的上下文环境可能提供了这样的参数,比如在OnPaint方法调用此函数时,OnPait带Graphics参数。具体的Graphics对象的获取可参考一下这里:
    http://blog.programfan.com/article.asp?id=17249