错误消息"5:对象当前在其他地方使用".在绘制多边形时? [英] error message "5:Object is currently in use elsewhere." when drawing polygon?

查看:121
本文介绍了错误消息"5:对象当前在其他地方使用".在绘制多边形时?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,
我正在vb.net中开发地图工具应用程序,用户可以在其中创建地图.我为显示/隐藏地图图层(例如村庄边界(多边形),地块边界(多边形),道路(线),井眼(点),挖井(点),学校(点))提供了复选框. /> 我正在使用RedrawMap函数在用户选中复选框时显示地图的各个图层.如果用户单击村庄边界图",则在名为"picMap"的面板控件上显示村庄边界等.
我面临的问题是当用户检查村庄边界层地图显示边界时,但是当用户检查下一个多边形层时(即绘制边界层)它给出了错误消息
"5:对象当前在其他地方使用.".
有人能告诉我错误是什么以及为什么发生吗?

我的代码如下:

hi all,
I am developing the map tool application in vb.net where user can create maps. I gave the check boxes for show/hide the layers of map like village boundary(polygon), plot boundary(Polygon), roads(Lines), bore wells(points), dug wells(points), schools(points).
I am using the function RedrawMap for displaying various layers of maps as user checked the check boxes. If user click village boundary map shows the village boundary etc on panel control named "picMap".
The problem i am facing is when user check the village boundary layer map shows the boundary but when user check the next polygon layer i.e. plot boundary layer it gives the error message
"5:Object is currently in use elsewhere.".
Can anybody tell me what the error is and why it is happening?

My code is as follows:

<br />
<pre lang="vb">Public Sub RedrawMap(ByVal index As Integer)<br />
<br />
Dim f As Font<br />
''Object Style<br />
Dim Size1 As Short<br />
Dim Size2 As Short<br />
Dim Colour1 As Integer<br />
Dim Colour2 As Integer<br />
<br />
Dim i As Short<br />
Dim j As Integer<br />
Dim k As Short<br />
Dim X As Integer<br />
Dim Y As Integer<br />
Dim FName As String<br />
Dim FValue As String<br />
Dim wIndex As Short<br />
<br />
Dim NrPts As Short<br />
Dim lRes As Integer<br />
Dim hRgn As Integer<br />
Dim lpRect As Rect<br />
<br />
Dim lWidth As Integer<br />
Dim lHeight As Integer<br />
<br />
If zf = 0 Then Exit Sub<br />
''''If frmMain.txtScale = "1/1" Or frmMain.txtScale = ''''1/1000000000" Then Exit Sub<br />
<br />
<br />
lWidth = CInt(lPicWidth) / zf<br />
lHeight = CInt(lPicHeight) / zf<br />
<br />
ShiftPt.X = lX<br />
ShiftPt.Y = lY<br />
<br />
''''Display the objects of the visible layers only<br />
Dim Cnt As Short<br />
<br />
Dim gr As Graphics<br />
Dim rc, gc As Short<br />
Dim bc As Short<br />
<br />
If zf = 0 Then Exit Sub<br />
<br />
lWidth = CInt(lPicWidth) / zf<br />
lHeight = CInt(lPicHeight) / zf<br />
<br />
ShiftPt.X = lX<br />
ShiftPt.Y = lY<br />
<br />
''''Display the objects of the visible layers only<br />
<br />
gr = picMap.CreateGraphics()<br />
Dim hdc As Integer<br />
For i = 1 To UBound(LayerData)<br />
DeleteHandle((i))<br />
If LayerData(i).lVisibile = 1 Then<br />
<br />
Size1 = LayerData(i).layerApp.Size1<br />
Size2 = LayerData(i).layerApp.Size2<br />
Colour1 = LayerData(i).layerApp.Color1<br />
Colour2 = LayerData(i).layerApp.Color2<br />
<br />
Select Case LayerData(i).layerKind<br />
Case LKIND_POINT<br />
If pointFlag = False Then<br />
pointFlag = True<br />
''''Set Symbol style,size and colour<br />
f = New Font(getSymbolFamilyName(Size2), Size1, FontStyle.Regular)<br />
<br />
picMap.Font = f<br />
Size1 = picMap.Font.SizeInPoints<br />
<br />
For j = 1 To UBound(LayerData(i).ObjList)<br />
If LayerData(i).ObjList(j).lObjId <> 0 Then<br />
If LayerData(i).ObjList(j).lVisible = 1 Then<br />
''''Vector to Raster<br />
X = ShiftPt.X - (MapRect.Left_Renamed - LayerData(i).ObjList(j).Points(1).X) * 37.8 / (zf * MapScale)<br />
Y = ShiftPt.Y - (LayerData(i).ObjList(j).Points(1).Y - MapRect.Top - mapHeight) * 37.8 / (zf * MapScale)<br />
<br />
''''Store Object Handle<br />
hRgn = CreateRectRgn(X - Size1 / 2, Y - Size1 / 2, X + Size1 / 2, Y + Size1 / 2)<br />
LayerData(i).ObjList(j).lObjHandle = hRgn<br />
<br />
If LayerData(i).ObjList(j).lSelection = 1 Then ''For selected objects<br />
picMap.ForeColor = System.Drawing.ColorTranslator.FromOle(MapData.lSelColour)<br />
End If<br />
<br />
f = New Font(getSymbolFamilyName(Size2), Size1, FontStyle.Regular)<br />
<br />
Dim br As Brush = New SolidBrush(System.Drawing.ColorTranslator.FromOle(RGB(rc, gc, bc)))<br />
gr.DrawString(Convert.ToString(Chr(Colour2)), f, br, X, Y)<br />
br.Dispose()<br />
End If<br />
End If<br />
Next j<br />
<br />
Case LKIND_POLY<br />
<br />
''''Display Objects<br />
For j = 1 To UBound(LayerData(i).ObjList)<br />
If LayerData(i).ObjList(j).lObjId <> 0 Then<br />
If LayerData(i).ObjList(j).lVisible = 1 Then<br />
NrPts = UBound(LayerData(i).ObjList(j).Points)<br />
ReDim Preserve list_temppoly(NrPts)<br />
<br />
For k = 1 To NrPts<br />
''''Vector to Raster<br />
X = ShiftPt.X - (MapRect.Left_Renamed - LayerData(i).ObjList(j).Points(k).X) * 37.8 / (zf * MapScale)<br />
Y = ShiftPt.Y - (LayerData(i).ObjList(j).Points(k).Y - MapRect.Top - mapHeight) * 37.8 / (zf * MapScale)<br />
list_temppoly(k).X = X<br />
list_temppoly(k).Y = Y<br />
Next k<br />
<br />
If LayerData(i).ObjList(j).lSelection = 1 Then ''For selected objects<br />
rc = Colour1 And &HFFS<br />
gc = ((Colour1 And &HFF00S) / &H100S) Mod &H100S<br />
bc = ((Colour1 And &HFF0000) / &H10000) Mod &H100S<br />
picMap.ForeColor = System.Drawing.ColorTranslator.FromOle(RGB(rc, gc, bc)) ''MapData.lSelColour<br />
<br />
End If<br />
<br />
''''Create polygon<br />
''''Store Object Handle<br />
hRgn = CreatePolygonRgn(list_temppoly(1), NrPts, 1)<br />
LayerData(i).ObjList(j).lObjHandle = hRgn<br />
<br />
hdc = gr.GetHdc()<br />
lRes = Polygon(hdc, list_temppoly(1), NrPts)<br />
<br />
End If<br />
End If<br />
Next j<br />
End Select<br />
End If<br />
Next i<br />
<br />
<br />
End Sub</pre><br />
<br />

推荐答案

您想让我们猜测是哪行导致错误?
You want us to GUESS what line causes the error ?


我认为这是问题所在

hdc = gr.GetHdc()
lRes =多边形(hdc,list_temppoly(1),NrPts)

这是当我单击村庄边界层(多边形)时可以正确显示的问题,但是当我单击下一个多边形层或点图层时,它将显示错误"5:Object当前在其他地方使用".
I think here is the problem

hdc = gr.GetHdc()
lRes = Polygon(hdc, list_temppoly(1), NrPts)

here is the problem when i click the village boundary layer(polygon) it shows properly but when i click next polygon layer or point layer it shows the error "5:Object is currently in use elsewhere".


我假设Polygon是您正在调用的Win32方法?为什么不只在Graphics对象中使用Polygon方法呢?
I assume Polygon is a Win32 method you''re p/invoking ? Why not just use the Polygon methods in the Graphics object ?


这篇关于错误消息"5:对象当前在其他地方使用".在绘制多边形时?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆