我正在尝试在 C# WinFormsBindingList
中将 aDataSource
用作 a ListBox
,但是每当我尝试向 中添加项目时BindingList
,我都会ArgumentOutOfRangeException
被抛出。以下代码演示了该问题(假设表单带有ListBox listBox1
):
BindingList<string> dataSource = new BindingList<string>();
listBox1.DataSource = dataSource;
dataSource.Add("Test1"); // Exception, here.
请注意,如果其中dataSource
已经有项目,我不会得到异常:
BindingList<string> dataSource = new BindingList<string>();
dataSource.Add("Test1");
listBox1.DataSource = dataSource;
dataSource.Add("Test2"); // Appears to work correctly.
DataSource
我可以通过在添加项目之前将属性设置为null
,然后重新设置来解决这个问题DataSource
,但这感觉就像一个黑客,我希望能够避免这样做。
是否有一种(非黑客)方法可以DataSource
在 a 上使用空ListBox
,以便向其中添加项目不会引发异常?
编辑:堆栈跟踪:
System.Windows.Forms.dll!System.Windows.Forms.ListBox.SelectedIndex.set(int value) + 0x1ec bytes
System.Windows.Forms.dll!System.Windows.Forms.ListControl.DataManager_PositionChanged(object sender, System.EventArgs e) + 0x2e 字节 System.Windows.Forms.dll
!System.Windows.Forms.CurrencyManager.OnPositionChanged(System.EventArgs e) + 0x39 字节
System.Windows.Forms.dll!System.Windows.Forms.CurrencyManager.ChangeRecordState(int newPosition, bool 验证, bool endCurrentEdit, bool firePositionChange, bool pullData) + 0x14f 字节
System.Windows.Forms.dll!System.Windows.Forms.CurrencyManager.List_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e) + 0x2e4 字节
System.dll!System.ComponentModel.BindingList.OnListChanged(System.ComponentModel.ListChangedEventArgs e) + 0x17 字节
System.dll!System.ComponentModel.BindingList.FireListChanged(System.ComponentModel.ListChangedType type, int index) + 0x35 字节
System.dll !System.ComponentModel.BindingList.InsertItem(int index, System._Canon item) + 0x3f bytes
mscorlib.dll!System.Collections.ObjectModel.Collection.Add( System._Canon item) + 0x76 bytes