2

データソースのバインドされたリストを持つリストボックスを使用する C# winform があります。リストは、コンピューター上のテキスト ファイルから作成されます。このリストボックスに「すべて削除」ボタンを作成しようとしていますが、少し問題があります。

まず、関連するコードは次のとおりです。

private void btnRemoveAll_Click(object sender, EventArgs e)
    {
        // Use a binding source to keep the listbox updated with all items
        // that we add
        BindingSource bindingSource = (BindingSource)listBox1.DataSource;

        // There doesn't seem to be a method for purging the entire source,
        // so going to try a workaround using the main list.
        List<string> copy_items = items;
        foreach (String item in copy_items)
        {
            bindingSource.Remove(item);
        }
    }

bindingSource を foreach しようとしましたが、列挙エラーが発生し、うまくいきません。私が知る限り、ソース全体を削除するだけのコードはないので、リスト自体を調べて項目名から削除しようとしましたが、 foreach が実際にオブジェクトまたは何かを返すため、それも機能しません。文字列ではありません。

これを行う方法に関する提案はありますか?

4

2 に答える 2

3

ジェネリック List を使用して Listbox を BindingSource にバインドした場合は、次のようにするだけです。

BindingSource bindingSource = (BindingSource)listBox1.DataSource;
IList SourceList = (IList)bindingSource.List;

SourceList.Clear();

もう一方の便利な方法として、フォーム、ビューモデル、または同様にトリックを行うもので、下にあるリストへの参照を保持します。

編集:これは、リストが ObservableCollection である場合にのみ機能します。通常の List の場合、BindingSource で ResetBindings() を呼び出して、更新を強制することができます。

于 2013-04-26T15:32:41.473 に答える