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

C# 自己写的一个图像显示控件,怎么调用后什么也不显示。调试的时候DrawAll()是执行了的
public partial class Map : UserControl
  {
  public Map()
  {
  InitializeComponent();
  }

  private object _lckDrawing = new object();
  private Bitmap _backgroundImage;
  private Rectangle _backgroundRect;

  public void DrawAll(Graphics bufferedCanvas)
  {
  bufferedCanvas.Clear(Color.Black);

  bufferedCanvas.SmoothingMode = SmoothingMode.HighQuality;
  bufferedCanvas.CompositingQuality = CompositingQuality.AssumeLinear;
  bufferedCanvas.InterpolationMode = InterpolationMode.Low;
  bufferedCanvas.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit;

  bufferedCanvas.DrawEllipse(Pens.White, 0, 0, 30, 21);
  GetMapObject gt=new GetMapObject();

  lock (_lckDrawing)
  {
  try
  {
  foreach (Lane lane in gt.GetLanes())
  {
  bufferedCanvas.DrawLine(Pens.White, lane.Point1, lane.Point2);
  }
  }
  catch (System.Runtime.InteropServices.ExternalException)
  {
   
  }
  }

  zoomTrackBar1.DrawAll(bufferedCanvas);
  }

  public override void Refresh()
  {
  RePaint();
  this.Invalidate();
  this.Update();
  }

  protected override void OnResize(EventArgs e)
  {
  Refresh();
  }

  protected void RePaint()
  {

  if (_backgroundImage == null)
  {
  _backgroundRect = ClientRectangle;
  _backgroundImage = new Bitmap(_backgroundRect.Width, _backgroundRect.Height);
  }

  using (Graphics bufferedCanvas = Graphics.FromImage(_backgroundImage))
  {
  DrawAll(bufferedCanvas);
  }
  }
  }

------解决方案--------------------
你的绘图对象是从Image中生成的啊!怎么可能会显示在界面呢

用Paint事件中的Graphic对象
------解决方案--------------------
RePaint 方法从当前控件创建画布
protected void RePaint()
{
using (Graphics bufferedCanvas = this.CreateGraphics())
{
DrawAll(bufferedCanvas);
}
}