Ich versuche, ein BindingList
als DataSource
für ein ListBox
in WinForms C# verwenden, aber wenn ich versuche, Artikel hinzufügen zu den BindingList
, erhalte ich ein ArgumentOutOfRangeException
geworfen. Der folgende Code demonstriert das Problem (unter der Annahme ein Formular mit ListBox listBox1
):ListBox ArgumentOutOfRangeException werfen, wenn Datasource Hinzufügen
BindingList<string> dataSource = new BindingList<string>();
listBox1.DataSource = dataSource;
dataSource.Add("Test1"); // Exception, here.
Beachten Sie, dass, wenn dataSource
bereits Elemente in ihm, ich habe nicht die Ausnahme erhalten:
BindingList<string> dataSource = new BindingList<string>();
dataSource.Add("Test1");
listBox1.DataSource = dataSource;
dataSource.Add("Test2"); // Appears to work correctly.
Ich kann um die Arbeit Problem, indem Sie die DataSource
Eigenschaft auf null
setzen, bevor Sie ein Element hinzufügen und die DataSource
nachher zurücksetzen, aber das fühlt sich an wie ein Hack, und ich möchte in der Lage sein, dies zu vermeiden.
Gibt es eine (nicht-hack) Möglichkeit, ein leeres DataSource
auf einem ListBox
zu verwenden, so dass das Hinzufügen von Elementen keine Ausnahmen auslöst?
bearbeiten: Stack Trace:
System.Windows.Forms.dll System.Windows.Forms.ListBox.SelectedIndex.set (int Wert) + 0x1ec Bytes
System.Windows. Forms.dll! System.Windows.Forms.ListControl.DataManager_PositionChanged (Objekt Absender, System.EventArgs e) + 0x2e Bytes
System.Windows.Forms.dll! System.Windows.Forms.CurrencyManager.OnPositionChanged (System.EventArgs e) + 0x39 Bytes
System.Windows.Forms.dll! System.Windows.Forms.CurrencyManager.ChangeRecordState (int newPosition, bool Validieren, bool EndCurrentEdit, bool firePositionChange, bool pullData) + 0x14f
System.Windows.Forms Bytes. dll! System.Windows.Forms.CurrencyManager.List_ListChanged (Objekt Absender, System.ComponentModel.ListChangedEventArgs e) + 0x2e4 Bytes
System.dll! System.ComponentModel.BindingList.OnListChanged (System.ComponentModel.ListChangedEventArgs e) + 0x17 Byte
System.dll! System.ComponentModel.BindingList.FireListChang ed (System.ComponentModel.ListChangedType Typ, int index) + 0x35 Bytes
System.dll! System.ComponentModel.BindingList.InsertItem (int Index, System._ Canon Artikel) + 0x3f Bytes
mscorlib.dll ! System.Collections.ObjectModel.Collection.Add (System. _Canon Artikel) + 0x76 Bytes
Keine Repro, die Stack-Ablaufverfolgung der Ausnahme post. –
Ich fühle mich irgendwie dumm - es ist eine Ausnahme, die .Net intern behandelt; Mein Debugger wurde so eingestellt, dass er bei allen ausgelösten Ausnahmen ausgelöst wird. Beim nächsten Mal werde ich sicher "weitermachen", bis ich einen tatsächlichen Absturz bekomme. – TreDubZedd