Пожар ListView.SelectedIndexChanged Событие программно? - PullRequest
4 голосов
/ 30 апреля 2009

Как программно запустить событие 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 в коллекции .Items на тот случай, если он может быть выбран по умолчанию и, следовательно, установка его в значение «true» не будет иметь никакого эффекта. Вызов «Application.DoEvents ()» - это еще один последний метод рва.

Не должен ли вышеуказанный код вызвать событие SelectedIndexChanged?

Следует отметить, что событие SelectedIndexChanged правильно срабатывает при выборе элемента с клавиатуры или мыши.

Ответы [ 3 ]

2 голосов
/ 30 апреля 2009

Если вы создаете класс, полученный из ListView, вы можете вызвать защищенный метод OnSelectedIndexChanged. Это вызовет событие SelectedIndexChanged.

2 голосов
/ 30 апреля 2009

Отмена выбора, установив его в false, не вызовет событие, но установив его в 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
    }

Возможно, у вас что-то еще происходит. Какое событие вы используете ваш код выбора?

2 голосов
/ 30 апреля 2009

Почему вы не можете переместить код, который в данный момент находится внутри метода вашего обработчика событий, в метод, который можно вызвать из исходного места, а также из вашего кода?

Примерно так:

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...