4

ListView の SelectedIndexChanged イベントをプログラムで起動するにはどうすればよいですか?

ユーザーが特定のアクションを完了した後、ListView の最初の項目が自動的に選択されるようにしました。SelectedIndexChanged イベント内には、選択された項目を強調表示するためのコードが既に存在します。項目が強調表示されないだけでなく、SelectedIndexChanged 内に設定されたブレークポイントにヒットすることはありません。さらに、Debug.WriteLine は出力の生成に失敗するため、イベントが発生していないことは確かです。

次のコードは、イベントの発生に失敗します。

listView.Items[0].Selected = false;
listView.Items[0].Selected = true;
listView.Select();
Application.DoEvents();

追加の .Select() メソッドの呼び出しは、適切な測定のために含まれています。;) 選択解除 (.Selected = false) は、ListViewItem がデフォルトで選択されている可能性がある場合に備えて、.Items コレクションの ListViewItem を選択解除するために含まれていたため、「true」に設定しても効果がありません。'Application.DoEvents()' 呼び出しは、もう 1 つの最後の方法です。

上記のコードによって SelectedIndexChanged イベントが発生するのではないでしょうか?

SelectedIndexChanged イベントは、キーボードまたはマウス入力で項目が選択されたときに適切に発生することに注意してください。

4

3 に答える 3

2

現在イベント ハンドラーのメソッド内にあるコードを、元の場所とコードから呼び出すことができるメソッドに移動できないのはなぜですか?

このようなもの:

class Foo
{
    void bar(Object o, EventArgs e)
    {
        // imagine this is something important
        int x = 2;
    }

    void baz()
    {
        // you want to call bar() here ideally
    }
}

これにリファクタリングされます:

class Foo
{
    void bar(Object o, EventArgs e)
    {
        bop();
    }

    void baz()
    {
        bop();
    }

    void bop()
    {
        // imagine this is something important
        int x = 2;
    }
}
于 2009-04-30T19:17:48.420 に答える
2

から派生したクラスを作成するListViewと、保護されたメソッドを呼び出すことができますOnSelectedIndexChanged。これにより、SelectedIndexChangedイベントが発生します。

于 2009-04-30T19:18:32.317 に答える
2

false に設定して選択を解除すると、イベントは発生しませんが、true に設定するとイベントが発生します。

    public Form1 ()
    {
        InitializeComponent();
        listView1.Items[0].Selected = false; // Doesn't fire
        listView1.Items[0].Selected = true; // Does fire.
    }

    private void listView1_SelectedIndexChanged (object sender, EventArgs e)
    {
        // code to run
    }

あなたは何か他のことが起こっているかもしれません。選択コードを実行しているイベントは何ですか?

于 2009-04-30T19:21:20.547 に答える