VISUAL BASIC - 如何将列表框数据源设置为空
VISUAL BASIC - How do you set a listbox datasource to null
我有一个列表框,我在其中使用这行代码来设置数据源:
ListBox2.DataSource = TextBox2.Text.Select(Function(c) c).ToList()
之后,我选择第一项,阅读它,然后删除它。但是当我尝试删除一个项目时它说
Items collection cannot be modified when the DataSource property is set.
所以我做了一些阅读,看起来我需要将数据源设置为 null
,但我在 VB 中找不到如何执行此操作。
感谢您的宝贵时间!
不,您不需要将 DataSource
设置为空。如果你这样做了,那么你将简单地分配 Nothing
,就像你对任何其他变量或 属性 所做的那样,但这不是你需要做的。如果要删除该项目,则需要将其从数据源中删除。这就是重点:如果控件已绑定,则您不会修改控件中的数据,而是修改数据源中的数据。
事实是,当您这样做时控件不会自动更新,因为它不知道数据源已更改。您应该做的是将 List
绑定到 BindingSource
并将其绑定到 ListBox
。您可以在设计器中添加BindingSource
。
BindingSource1.DataSource = TextBox2.Text.ToList()
ListBox2.DataSource = BindingSource1
然后您可以在 BindingSource
上调用 Remove
、RemoveAt
或 RemoveCurrent
来删除项目。如果需要,您还可以在 BindingSource
上调用 ResetBindings
来刷新控件。
请注意,我还从您的代码中删除了多余的 Select
调用。 Text
属性 是类型 String
并且 String
已经实现了 IEnumerable(Of Char)
所以不需要 Select
调用,除非你想要除Chars
他们自己。
我有一个列表框,我在其中使用这行代码来设置数据源:
ListBox2.DataSource = TextBox2.Text.Select(Function(c) c).ToList()
之后,我选择第一项,阅读它,然后删除它。但是当我尝试删除一个项目时它说
Items collection cannot be modified when the DataSource property is set.
所以我做了一些阅读,看起来我需要将数据源设置为 null
,但我在 VB 中找不到如何执行此操作。
感谢您的宝贵时间!
不,您不需要将 DataSource
设置为空。如果你这样做了,那么你将简单地分配 Nothing
,就像你对任何其他变量或 属性 所做的那样,但这不是你需要做的。如果要删除该项目,则需要将其从数据源中删除。这就是重点:如果控件已绑定,则您不会修改控件中的数据,而是修改数据源中的数据。
事实是,当您这样做时控件不会自动更新,因为它不知道数据源已更改。您应该做的是将 List
绑定到 BindingSource
并将其绑定到 ListBox
。您可以在设计器中添加BindingSource
。
BindingSource1.DataSource = TextBox2.Text.ToList()
ListBox2.DataSource = BindingSource1
然后您可以在 BindingSource
上调用 Remove
、RemoveAt
或 RemoveCurrent
来删除项目。如果需要,您还可以在 BindingSource
上调用 ResetBindings
来刷新控件。
请注意,我还从您的代码中删除了多余的 Select
调用。 Text
属性 是类型 String
并且 String
已经实现了 IEnumerable(Of Char)
所以不需要 Select
调用,除非你想要除Chars
他们自己。