【问题标题】:Array to combo box?数组到组合框?
【发布时间】:2013-01-10 16:13:27
【问题描述】:

我有这个结构,有一个结构类型的数组。

Structure CustomerAccountsRec
    Dim strFirstName As String
    Dim strLastName As String
    Dim intAge As Integer
    Dim strAddress As String
    Dim strTown As String
    Dim strPostcode As String
    Dim strCusNum As String
End Structure

Public strCusArray() As CustomerAccountsRec

我希望能够获取数组的 strCusNum 并用它填充组合框,但不知道如何。有什么帮助吗?

【问题讨论】:

  • 您使用的是 WPF 还是 WinForms?

标签: vb.net


【解决方案1】:

您还可以在您的结构中覆盖ToString 方法,如上所述。我还创建了一个List(Of CustomerAccountsRec),它使添加值更容易一些,然后我将列表绑定到ComboBox's DataSource

Public Class Form1
    Structure CustomerAccountsRec
        Dim strFirstName As String
        Dim strLastName As String
        Dim intAge As Integer
        Dim strAddress As String
        Dim strTown As String
        Dim strPostcode As String
        Dim strCusNum As String
        Public Overrides Function ToString() As String
            Return strCusNum
        End Function
    End Structure

    Public strCusArray As List(Of CustomerAccountsRec) = New List(Of CustomerAccountsRec)

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.

        Dim carec As CustomerAccountsRec = New CustomerAccountsRec
        carec.strFirstName = "Hello"
        carec.strLastName = "World"
        carec.strCusNum = "Hello World"
        carec.strTown = "AnyTown"
        carec.strAddress = "AnyStreet"
        carec.strCusNum = "12345678"
        strCusArray.Add(carec)
        ComboBox1.DataSource = strCusArray

    End Sub
End Class

【讨论】:

  • 谢谢先生,这对我有很大帮助...... :)
【解决方案2】:

您可以使用 ComboBox.Items.Add 方法添加项目,并且要正确显示结构,您必须覆盖它的 ToString 方法。

见:

ComboBox: Adding Text and Value to an Item (no Binding Source)

how to add value to combobox item

【讨论】:

    【解决方案3】:

    您可以使用 LINQ 获取包含您要显示的项目的数组,然后将该数组绑定到 ComboBox

    Dim combo as New ComboBox
    combo.DataSource = strCusArray.Select(Function(f) f.strCusNum).ToArray()
    

    【讨论】:

    • 但这样只会将字符串添加到 ComboBox,而不是对象。 ComboBox.SelectedItem 将返回选定的名称,而不是选定的对象。 LINQ 不会也更慢吗?
    • @omittones 从问题的措辞来看,我认为所有 mossypne 想要的是String,但我不确定。这个问题有点含糊。至于速度,LINQ 会产生一些开销,但很可能可以忽略不计。
    • @JasonTyler 基本上我有一个编辑客户表单,我想在组合框中显示每个客户 ID,以允许用户选择要编辑的帐户。客户 ID 存储在 CustomerRecordStructure 类型的数组中
    • @mossypne 我明白了。我认为 Mark Hall 的回答应该足够了,除非您需要 ToString 方法用于其他目的。我的解决方案可能不适合您,因为在进行选择时您需要额外的逻辑来进行查找(使用 ID 查找记录)。
    【解决方案4】:

    如果我理解你的问题。

    Public strCusArray() As CustomerAccountsRec的实际结果是null,所以我们不能用它把CustomerAccountsRecComboBox的所有项相加

    ListStructure中的所有项目我们需要使用System.Reflection Namespace

      Structure CustomerAccountsRec
            Dim strFirstName As String
            Dim strLastName As String
            Dim intAge As Integer
            Dim strAddress As String
            Dim strTown As String
            Dim strPostcode As String
            Dim strCusNum As String
      End Structure
    
      Dim fi As FieldInfo() = GetType(CustomerAccountsRec).GetFields(BindingFlags.[Public] Or BindingFlags.Instance)
            For Each info As FieldInfo In fi
                ComboBox2.Items.Add(info.Name)
      Next
    

    来源:C# version

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多