2013-12-11 57 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