C# – Fire ListView.SelectedIndexChanged Event Programmatically

clistviewselectedindexchangedwinforms

How can one programmatically fire the SelectedIndexChanged event of a ListView?

I've intended for the first item in my ListView to automatically become selected after the user completes a certain action. Code already exists within the SelectedIndexChanged event to highlight the selected item. Not only does the item fail to become highlighted, but a breakpoint set within SelectedIndexChanged is never hit. Moreover, a Debug.WriteLine fails to produce output, so I am rather certain that event has not fired.

The following code fails to fire the event:

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

The extra .Select() method call was included for good measure. 😉 The deselection (.Selected = false) was included to deselect the ListViewItem in the .Items collection just in case it may have been selected by default and therefore setting it to 'true' would have no effect. The 'Application.DoEvents()' call is yet another last ditch method.

Shouldn't the above code cause the SelectedIndexChanged event to fire?

I should mention that the SelectedIndexChanged event fires properly on when an item is selcted via keyboard or mouse input.

Best Answer

Deselecting it by setting it to false won't fire the event but setting it to true will.

    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
    }

You might have something else going on. What event are you running your selection code?

Related Topic