Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何合作/绑定不同列表上的项目_.net_Vb.net_Winforms_Generic List - Fatal编程技术网

.net 如何合作/绑定不同列表上的项目

.net 如何合作/绑定不同列表上的项目,.net,vb.net,winforms,generic-list,.net,Vb.net,Winforms,Generic List,这是我的声明 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 这是我在列表中添加项目的代码 F

这是我的声明

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
我真的希望你明白我想说的。。 这对我来说真的很难。哈哈

无论如何,正如您所看到的,我为数据库中的每个数据将
元素添加到
列表中。这段代码给出了我需要的结果。在
窗体加载地图上的所有数据(标记)
。如果我在表单加载时添加另一个数据(名称、纬度、液化天然气),viola会在地图上添加另一个标记

列表
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
现在,此代码位于单击事件的
标记上。因此,每次单击标记时,它都会向我显示添加到
fList
的表单,然后显示该表单将向特定标记显示的相应条件。
所以如果我有一个名为“Golf Club”的标记,就会出现高尔夫俱乐部的表格

有了这个条件,我可以拿出我想要的表格。
回到我面临的问题上来

这是我的数据库。。和
cList
必须包含CameraID
因此,如果一切顺利,如果我退出starmall,我应该从Camera3获得starmall表单+视频提要

结果:
在Marker\u上单击
-->我单击的所有标记,仅显示Camera1。。尽管我想要的是拉出相机#取决于我单击的MarkerName/Form.Text

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

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

问题:如何根据MarkerName拉出相机

请向我提问,以便让您更清楚。

注意

        For Each c In cList                    'recently added code
            If item.ToolTipText = m Then
您没有显示此
项的来源

无论如何,
ToolTipText
m
都独立于cameraID
c
。因此,
cList
中的第一个c始终与所有标记匹配。这就是为什么你会有照相机


我建议进行一些代码重构。您说过所有列表都包含相同数量的项,每个项对应datatable中的一个标记行。所以,最好让一个小类说它
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)
现在迭代datatable,并在每个datarow中填充一项

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

依此类推

Q1:
fList
cList
hList
不填充,而是在代码中使用。问题2:所有列表的项目数是否相同?也就是说,对于dataTable中的每一行,您是否在所有列表中只插入一项?首先,所有列表都没有值,它们的元素将来自数据库,当form_加载时,数据库将加载这些值。因为他们都来自db,所以他们有项目的数量。每一行,我添加一个,直到我加载了所有。谢谢你的想法,我将首先探讨这一点。看到类似的事情,还是没有运气。但让我试试你的解决方案。在你的行中,
dim m as markerRow=markers(0)
我不明白你想暗示什么。你能解释一下它的作用吗?参见
标记
是一个
标记项列表。在
Marker\u单击事件
时,您需要找出单击了哪个标记。你如何发现是你关心的问题。例如,您可以使用lat/long。找到单击了哪个标记后,可以在
markers
集合中循环并选择相应的行。将
标记(0)
中的零替换为步骤中找到的标记的序列号。缺少某些内容<代码>标记上没有项目,因为我们没有在代码中添加(dtrow(“纬度”)
dim marker=New GMapMarkerGoogleGreen(New PointLatLng(dtrow(“纬度”)、dtrow(“经度”))
这样标记就有纬度和经度信息。