2016-10-01 19 views
1

私は、ユーザーにフラグが表示され、comboBoxから適切な国を選択する必要がある学校向けのWinFormsアプリケーションを作成しています。私は...WinForms Comboboxがアイテムを削除しない

List<Flag> flags; 
comboBox.DataSource = flags; 

ターンした後、私はリストから、前のフラグを削除し、コンボボックスのデータソースを更新しています...コンボボックスのDataSourceとして

flags.Remove(currentFlag); 
comboBox.DataSource = flags; 
をタイプフラグのリストを使用しています

フラグがリストから削除されていますが、comboBoxから削除されていません。どこが間違っていますか?

答えて

0

根本的な問題は、コンボボックスは、そのデータソースの変更、それが必要として、それはdoesnのため、そう明らかにそれは、視覚的に更新されていない通知のいずれかの種類を受信して​​いないことである、このようにそれを行います何かが起こったことを理解している。

理想的ではない解決策は、リストを削除してもう一度追加することを提案したSajeetharanです。これにより、コントロールが強制的にリスト全体を再読み込みし、変更内容を「キャッチ」して、欠落している項目を削除します。

適切な解決策は、コントロールに変更通知を提供し、必要に応じて再描画を許可する適切なコレクション型を使用することです。これがBindingList<T> classの目的です。普通のリストの代わりにバインディング用のデータソースを設定するときは、これを使用することをお勧めします。

だから、要するに、あなたのコードはなる:

その後
BindingList<Flag> flags = new BindingList<Flag>(); 
comboBox.DataSource = flags; 

、あなたは単にそれから項目を削除します。

flags.Remove(currentFlag); 

とデータバインディングエンジンから項目を削除するの面倒を見ますコンボ。

+0

これは素晴らしい解決策のようです。私はこのアプローチを試みるつもりです。ありがとうございました! – dag623

+0

チャームのように働いた!再度、感謝します! – dag623

2

ここ

flags.Remove(currentFlag); 
comboBox.DataSource = null; 
comboBox.DataSource = flags; 
+0

ありがとうございました!私はあなたが示唆したようにしましたが、ディスプレイのアイテムが正しく表示されませんでした。すべてのアイテムがFlagQuiz.Flagとして表示されていました。データソースを設定する前にバインディングソースを設定しようとしましたが、現在は動作しているようです。あなたの助けをもう一度ありがとう! – dag623

+0

@ dag623あなたはアイテムが削除されていると確信していますか?どのようにcurrentFlagオブジェクトを取得するのですか – Sajeetharan

+0

はい、それは私の最初の勘違いだったので、私のリストで削除されていました。私はブレークポイントを設定し、私のリストが更新されていることを確認しました。あなたのご意見ありがとうございます! – dag623

関連する問題