質問

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

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

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

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

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

上記のコードによってSelectedIndexChangedイベントが発生することはありませんか?

キーボードまたはマウス入力を介してアイテムが選択されると、SelectedIndexChangedイベントが適切に発生することに言及する必要があります。

役に立ちましたか?

解決

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
    }

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

他のヒント

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

次のようなもの:

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;
    }
}

ListView から派生したクラスを作成する場合、プロテクトメソッド OnSelectedIndexChanged 。これにより、 SelectedIndexChanged イベントが発生します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top