0

リストボックスとチェックボックス(すべて選択)があります。呼び出しているコードでlistbox.items.clear()、このイベントをサブスクライブしたいので、リストボックスがクリアされるたびに、selectAllチェックボックスもオフの状態にする必要があります。

現在、リストボックスの SelectedIndexChanged イベントでこれを処理していますが、リストボックス イベントのリストに ItemsClear のようなイベントが見つかりませんでした。

イベント処理を使用してチェックボックスをオフにしたいと思います。

4

4 に答える 4

2

私の知る限り、呼び出された直接の結果として発生するイベントはありませんListBox.Items.Clear。ただし、独自の動作を実装できます。

public class CustomListBox : ListBox
{
    public event EventHandler ItemsCleared;

    public void ClearItems()
    {
        Items.Clear();
        if(this.ItemsCleared != null)
        {
            this.ItemsCleared(this, EventArgs.Empty);
        }
    }
}

上記のクラスを Windows フォーム アプリケーションで宣言するだけです。標準を使用する代わりにListBox、拡張を使用してイベントCustomListBoxにサブスクライブします。ItemsCleared

CustomListBox.Items.Clear電話をかける代わりにCustomListBox.ClearItems

于 2013-04-24T08:12:05.343 に答える
2

イベントが重要な場合は、シナリオで許可されている場合は、 BindingListを使用してバインドすることをお勧めします。ListBoxこのアプローチにより、新しいアイデアが得られるかもしれません。

BindingList<string> myList;

myList = new BindingList<string>(...);
listBox1.DataSource = myList;
myList.ListChanged += new ListChangedEventHandler(myList_ListChanged);

次に、ListChangedBindingList (他の多くのイベントの中でも) のイベントを使用して、ListBox がクリアされたときに「すべて選択」チェックボックスで操作を実行できます。ListBox1.Items.Clear().

void myList_ListChanged(object sender, ListChangedEventArgs e)
{
    if (e.ListChangedType == ListChangedType.Reset)
    {
        ... // Do what you need here
    }
}
于 2013-04-24T08:26:53.120 に答える