2013-12-11 32 views
2

这些都是我的声明绑定物品..如何合作伙伴/不同的名单

Public fList As New List(Of Form) 
Dim mNameList As New List(Of String) 
Dim mList As New List(Of GMapMarker) 
Dim cList As New List(Of Integer)  'recently added code 
Dim hList As New List(Of String)  'recently added code 

这是我的代码,我我的名单上添加项目..

For Each dtrow In markerDtable.Rows 
     marker = New GMapMarkerGoogleGreen(New PointLatLng(dtrow("Latitude"), dtrow("Longitude"))) 
     marker.ToolTipText = dtrow("MarkerName") 

     mNameList.Add(dtrow("MarkerName")) 
     cList.Add(dtrow("CameraID"))   'recently added code 

我真的希望你得到我想说的话.. 这对我来说真的很难。大声笑

无论如何,正如你所看到的,我为我的数据库中的每个数据添加elements到我的List。这段代码给了我需要的结果。在地图上加载所有数据(标记)。如果我在表单加载时添加了另一个数据(名称,Lat,Lng),则可以在地图上添加另一个标记。

列表mNameList表示标记名称列表而非ID。只是名字..
到下一个代码..

For Each m In mNameList 
      For Each c In cList     'recently added code 
       If item.ToolTipText = m Then 
        Dim f As New Form2 
        fList.Add(f) 
        mList.Add(item) 
        With f 
         .Show() 

         .AxXHDec1.Camera = c  'recently added code 
         .AxXHDec1.Host = some ip 'recently added code 

         Dim p As New Point 
         p = item.LocalPosition + New Point(15, 30) 
         .Location = p 
         .Text = m 
        End With 
        Exit Sub 
       End If 
      Next 
Next 

现在这个代码,是在Marker_Click事件。所以如果我点击标记,它会显示我添加到fList的表格,然后表示表格会显示给特定标记的相应条件。
因此,如果我有一个名为“高尔夫俱乐部”的标记,俱乐部将出现..

与这种情况下,我可以带出我想要的形式。
回到我所面临的问题..

这是我的数据库..和cList必须包含CameraID
所以,如果事情进展顺利,如果我拉出来starmall我应该得到的starmall形式 +从Camera3视频馈送

enter image description here

结果:OnMarker_Click - >所有标记我点击,仅显示摄像机1 ..但我要的是取决于什么拉出相机#MarkerName/Form.Text我一下..

提醒:最近添加代码 - 意味着这是我解决我的解决方案的第一次尝试。其他代码正在完美工作。我只需要一些解决方法。

这是不是谷歌的API ..我从codeplex使用gmaps.net。

问题:我该如何拔出相机#参考MarkerName?

为我提出问题,使它更清晰。

+0

Q1:'fList','cList'和'hList'不填充,但在代码中使用。 Q2:所有的清单都有相同数量的项目吗?也就是说,对于dataTable中的每一行,是否在所有列表中插入了完全一个项目?首先所有的列表都是 – inquisitive

+0

,没有值,它们的元素将来自form_loads时的数据库。因为他们都来自分贝,他们有数量的项目。和每一行,我加一个,直到我已经加载所有。 – AdorableVB

回答

1

注意到,

 For Each c In cList     'recently added code 
      If item.ToolTipText = m Then 

你没有表现出这地方从item来。

无论如何,ToolTipTextm都是独立于cameraID c。因此cList中的第一个c将始终与所有标记匹配。这就是为什么你得到camera1。


我建议一点代码重构。你说所有列表都包含相同数量的项目,每个数据表中的一个标记行都有一个项目。所以,最好让小班说出MarkerRow

class MarkerRow 
    dim MarkerName as string 
    dim cameraID as integer 
    dim hostAddress as string 

    dim marker as GMapMarker 
end class 

只创建一个列表,使标记类型,而不是一串字符串和整数

dim markers as new List(of MarkerRow) 

的现在遍历数据表,并填写一个项目每一个数据行的

For Each dtrow In markerDtable.Rows 
    dim marker = New GMapMarkerGoogleGreen(New PointLatLng(dtrow("Latitude"), dtrow("Longitude"))) 
    marker.ToolTipText = dtrow("MarkerName") 

    dim markerRow = new MarkerRow 
    with markerRow 
     .MarkerName = dtrow("MarkerName") 
     .cameraID = dtrow("CameraID") 
     .hostAddress = dtrow("hostAddress") 

     .marker = marker 
    end with 
next 

这样,当你需要一个标记,你总是在一个地方的所有信息

dim m as MarkerRow = markers(0) ' or whatever by any criteria you like 

那么机器会自动有

m.cameraID 
m.marker 
m.markerName 

+0

谢谢你的想法,我会先探索这个。看到类似的东西,仍然没有运气。但让我试试你的解决方案。 – AdorableVB

+0

在你的帖子中,'dim m as markerRow = markers(0)'我没有得到你想表达的意思。你能否说明它的作用? – AdorableVB

+0

查看'markers'是一个'List-of-MarkerRow'项目。在Marker_Click事件中,您需要找出*哪个*标记被点击。你如何发现是你的担忧。恩。你可以使用经纬度。一旦找出哪个标记被点击了<#>,你可以遍历'markers'集合并选择合适的行。用在步骤<#>中找到的标记的序列号替换“标记(0)”中的*零*。 – inquisitive