【问题标题】:Issue when binding combobox and listbox to List (VB.NET)将组合框和列表框绑定到列表(VB.NET)时出现问题
【发布时间】:2014-10-18 18:01:49
【问题描述】:

我正在尝试将 ComboBox 和 ListBox 绑定到 Vb.Net (VS2013) 中的 List(Of String),这是针对 WinForms 应用程序的,问题是在 ComboBox 和ListBox,在其中一个上选择一个项目会影响另一个控件,例如,在控件填充了信息后,如果我从 ListBox 中选择一个项目,那么在 ComboBox 中选择了相同的项目,这就是与组合框相同的方式,如果我从中选择一个项目,那么该项目也会在列表框中被选中,所以我的问题是......如何将组合框和列表框绑定到同一个列表(字符串)而不影响控件上的行为,目的是根据列表的内容使该表单中的所有控件保持同步,我在这样的模块中声明了列表:

Public listaAreas As New List(Of String)

然后控件在表单加载时填充如下:

    cmbArea.DataSource = listaAreas
    lstAreas.DataSource = listaAreas

每当我需要更新信息时,我都会运行此方法:

Private Sub RefreshLists()
    lstAreas.DataSource = Nothing
    lstAreas.DataSource = listaAreas

    cmbArea.DataSource = Nothing
    cmbArea.DataSource = listaAreas
End Sub

如果我遗漏了一些信息,请告诉我,这是我的第一篇文章,但我认为它已经足够清楚,所以你明白我在这里想要完成什么...... =)

提前致谢!

【问题讨论】:

    标签: vb.net combobox listbox datasource


    【解决方案1】:

    尝试设置单独的 BindingSources 并尝试使用 BindingList(Of String) 而不是仅使用 List,这样不会报告项目更改:

    Private listaAreas As New BindingList(Of String)
    Private cbSource As New BindingSource(listaAreas, String.Empty)
    Private lbSource As New BindingSource(listaAreas, String.Empty)
    
    Public Sub New()
      InitializeComponent()
      cmbArea.DataSource = cbSource
      lstAreas.DataSource = lbSource
    End Sub
    

    在您的代码中使用了相同的货币头寸,但是通过定义两个单独的绑定源,每个都有自己的头寸属性。

    【讨论】:

    • 谢谢 LarsTech,我进行了更改,现在运行良好,但只是想了解一下您对此的看法……您将如何删除列表框中的选定项目?,我正在尝试通过在 lstAreas.SelectedItems 上使用 For Each 语句将它们从 BindingList 中删除,但由于控件被绑定而引发错误。
    • 您无法从 ListBox.Items 集合中删除该项目,您必须将其从 listaAreas 列表中删除:listaAreas.Remove(lstAreas.SelectedItem)
    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2018-06-20
    • 2010-10-10
    • 2011-07-10
    • 2011-11-05
    相关资源
    最近更新 更多