【问题标题】:Access combobox properties inside array of comboboxes访问组合框数组中的组合框属性
【发布时间】:2014-07-01 19:48:46
【问题描述】:

我有一组组合框,它们使用 Visual Studio 2010 在 VB.Net 中动态添加到 Windows 窗体中。

我想访问 cboBox.list 和 cboBox.selecteditem 属性,如果我使用的话我绝对可以

                dim cboList() as ComboBox = {}

                ReDim Preserve cboList(cboList.Count)
                Dim location As New System.Drawing.Point(FieldX, FieldY)

                cboList(cboList.Count - 1) = New ComboBox
                With cboList(cboList.Count - 1)
                    .Name = "cboName"
                    .Location = location
                    .Size = Size
                    .TabIndex = 1
                End With

然后要访问它,我使用任一

     cboList(0).Items 

     cboList(0).SelectedIndex

因为这些是从数据库中的信息生成的,我在其中存储它们的名称、X/Y 位置等,并且可能在程序运行时在不同时间添加,所以我在 0 位置可能没有相同的组合框每一次。我一直在尝试找到一种方法来做到这一点:

   cbolist("ComboName").Items

并且已经在互联网上干了起来。有没有办法使用数组中的组合框名称来找到合适的组合框,如果有,怎么做?

我在 Visual Studio 10 中使用 VB.Net Framework 3.5。

【问题讨论】:

    标签: arrays vb.net visual-studio-2010 combobox


    【解决方案1】:

    是的,您需要使用Dictionary(Of String, ComboBox) 而不是数组:

    Dim cboDictionary as Dictionary(Of String, ComboBox)
    Dim cbo As New ComboBox
    With cbo
      '...
    End With
    cboDictionary.Add(cbo.Name, cbo)
    

    请注意,如果您有许多 ComboBox,并且它们的数量经常变化,那么您也可以提高性能。这是因为 Dictionary 针对这种情况进行了优化,lookupaddremove 操作在大多数情况下都在 O(1) 时间内运行。

    数组没有lookup 功能,因此需要迭代才能找到一个元素,并且需要创建一个新数组来添加或删除一个元素(您正在使用ReDim 执行此操作)。相比之下,Dictionary 确实不会每次都重新创建自己。

    【讨论】:

    • 我现在正在转换我的数组,如何使用它根据名称访问字典中的组合框?
    • 好吧,我想通了。感谢您的帮助。现在我又遇到了另一个问题,我正在努力解决......
    • @Bigdaddyduergar:不客气! TryGetValue 是从字典中检索值的最有效方法。如果您还有其他符合 SO 格式的问题,请随时提出新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多