日期:2014-05-18  浏览次数:20811 次

Graphics DrawLine
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?  

我现在就想画这个线,怎么画?

------解决方案--------------------
Pen p = new Pen(Color.Red, 1); 
Point p1=...; 
Point p2=...; 
Graphics gr=this.CreateGraphics(); 
gr.DrawLine(p,p1,p2); 
这样就不就可以了
------解决方案--------------------
首先要确认你想在什么上画线,
可以使用Graphics.FromHwnd,Graphics.FromHdc,Graphics.FromImage方法创建Graphics对象,然后绘制
------解决方案--------------------
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
------解决方案--------------------
你为什么要在类里画呢?你直接调用方法把要画的点计算出来不就行了?
你自己定义个类。类里有p1,p2两个point,要是愿意把pen也加进去。最后把这个对象作为结果返回回来,你就可以根据这个类里的属性画点了。你在你的form里是可以得到这个Graphics的。