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 上调用 RemoveRemoveAtRemoveCurrent 来删除项目。如果需要,您还可以在 BindingSource 上调用 ResetBindings 来刷新控件。

请注意,我还从您的代码中删除了多余的 Select 调用。 Text 属性 是类型 String 并且 String 已经实现了 IEnumerable(Of Char) 所以不需要 Select 调用,除非你想要除Chars 他们自己。