4

C# WinForms でaをaBindingListとして使用しようとしていますが、アイテムを に追加しようとすると、スローされます。次のコードは問題を示しています (フォームに があると仮定します)。DataSourceListBoxBindingListArgumentOutOfRangeExceptionListBox 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ありますか?ListBox

編集:スタックトレース:

System.Windows.Forms.dll!System.Windows.Forms.ListBox.SelectedIndex.set(int 値) + 0x1ec バイト
System.Windows.Forms.dll!System.Windows.Forms.ListControl.DataManager_PositionChanged(オブジェクト送信者、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 Validating、bool endCurrentEdit、bool firePositionChange、bool pullData) + 0x14f バイト
System.Windows.Forms.dll!System.Windows.Forms.CurrencyManager.List_ListChanged(オブジェクト送信者、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 タイプ、int インデックス) + 0x35 バイト
System.dll !System.ComponentModel.BindingList.InsertItem(int インデックス, System._ Canon アイテム) + 0x3f バイト
mscorlib.dll!System.Collections.ObjectModel.Collection.Add(
System._Canon アイテム) + 0x76 バイト

4

3 に答える 3

2

[例外]ダイアログ([デバッグ]-> [例外])ですべてをチェックしたことがわかりました。したがって、例外は存在しますが、.Netフレームワークによって(サイレントに)処理されます。プログラムの実行を続行すると、期待される結果が表示されます。

于 2010-12-20T21:11:42.100 に答える
0

これを引き起こしている可能性のあるイベントにイベント ハンドラーがアタッチされている可能性がありますListBoxか? あなたが説明している動作を再現できません。

に単一のListBoxバインドを使用して完全に空の WinForms プロジェクトを作成しBindingList<string>、(プロパティを設定した後) リストに値 "Test" を追加するListBox.DataSourceと、期待どおりに項目 "Test" がボックスに表示されました。

あなたとあなたのどちらにも、欠落している可能性のあるイベントハンドラーが添付されているかどうかを確認しますListBoxBindingList<string>

于 2010-12-20T19:07:09.243 に答える
0

私は同じ問題を抱えていましたが、いくつかの調査の結果、この .Net エラーを回避する唯一の回避策は、リストが空でないときに BindingList のみを DataSource に割り当てることであることがわかりました。

変更できる場合は、リストに常に保持するダミー オブジェクトを作成し、リストが空でないときにそれを削除できます。

最後に、ArgumentOutOfRangeException がスローされるのを回避する方法を見つける価値はありません。

于 2014-11-05T16:50:04.970 に答える