读书人

C# 自己写的一个图像显示控件如何调

发布时间: 2012-06-21 13:42:41 作者: rapoo

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);
}
}

读书人网 >C#

热点推荐