Запустите ListView.Событие SelectedIndexChanged выбрано программным путем?

StackOverflow https://stackoverflow.com/questions/808569

Вопрос

Как можно программно запустить событие SelectedIndexChanged ListView?

Я предполагал, что первый элемент в моем ListView будет автоматически выбран после того, как пользователь выполнит определенное действие.В событии SelectedIndexChanged уже существует код для выделения выбранного элемента.Элемент не только не выделяется, но и точка останова, установленная в SelectedIndexChanged, никогда не будет достигнута.Более того, Debug.WriteLine не выдает выходные данные, поэтому я скорее уверен, что событие не сработало.

Следующий код не запускает событие:

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

Дополнительный вызов метода .Select() был включен для пущей убедительности.;) Отмена выбора (.Selected = false) была включена для отмены выбора элемента ListViewItem в .Коллекция элементов на всякий случай, возможно, она была выбрана по умолчанию, и поэтому установка для нее значения "true" не имела бы никакого эффекта.Вызов 'Application.DoEvents()' - это еще один метод последнего отказа.

Разве приведенный выше код не должен вызывать срабатывание события 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