Как программно выбрать элемент в ListView? - PullRequest
59 голосов
/ 26 апреля 2011

Я пытаюсь выбрать первый элемент в ListView программным путем, но, похоже, он не был выбран. Я использую следующий код:

if (listView1.Items.Count > 0)
    listView1.Items[0].Selected = true;

На самом деле у меня раньше была эта проблема, но я не могу вспомнить, как мне удалось ее решить!

Ответы [ 7 ]

82 голосов
/ 26 апреля 2011

Скорее всего, выбран элемент , вы просто не можете сказать, потому что фокус находится на другом элементе управления. Это можно решить несколькими способами, в зависимости от дизайна вашего приложения.

  1. Простое решение - сначала установить фокус на ListView, когда отображается ваша форма. Пользователь обычно устанавливает фокус на элементы управления, нажимая на них. Однако вы также можете указать, какие элементы управления получают фокус программно. Один из способов сделать это - установить для индекса вкладки элемента управления значение 0 (самое низкое значение указывает элемент управления, который будет иметь начальный фокус). Вторая возможность - использовать следующую строку кода в событии Load формы или сразу после установки свойства Selected:

    myListView.Select();
    

    Проблема этого решения заключается в том, что выбранный элемент больше не будет выделен, когда пользователь устанавливает фокус на другой элемент управления в вашей форме (например, текстовое поле или кнопку).

  2. Чтобы это исправить, вам нужно установить для свойства HideSelection элемента управления ListView значение False. Это приведет к тому, что выбранный элемент на останется выделенным , даже когда элемент управления потеряет фокус.

    Когда элемент управления имеет фокусировку , фон выбранного элемента будет окрашен цветом подсветки системы. Когда элемент управления не имеет фокус, фон выбранного элемента будет окрашен в системный цвет, используемый для серого (или отключенного) текста.

    Вы можете установить это свойство либо во время разработки, либо с помощью кода:

    myListView.HideSelection = false;
    
29 голосов
/ 26 апреля 2011
if (listView1.Items.Count > 0)
{
    listView1.Items[0].Selected = true;
    listView1.Select();
}

элементы списка не отображаются выбранными, если элемент управления не имеет фокуса (или для свойства HideSelection не установлено значение false)

8 голосов
/ 26 апреля 2011

Я думаю, что проблема и решение были описаны Коди Грей!У меня есть дополнительная заметка.

Пожалуйста, проверьте фокусировку указанного элемента списка (и элемента управления!).Я мог установить фокус и выделение с помощью следующих строк кода:

this.listView1.Items[1].Selected = true;
this.listView1.Items[1].Focused = true;

Но сфокусированное управление было условием!

3 голосов
/ 17 декабря 2016
        int i=99;//is what row you want to select and focus
        listViewRamos.FocusedItem = listViewRamos.Items[0];
        listViewRamos.Items[i].Selected = true;
        listViewRamos.Select();
        listViewRamos.EnsureVisible(i);//This is the trick
1 голос
/ 12 июня 2018

Я знаю, что это старый вопрос, но я думаю, что это окончательный ответ.

listViewRamos.Items[i].Focused = true;
listViewRamos.Items[i].Selected = true;
listViewRemos.Items[i].EnsureVisible();

Если существует вероятность того, что элемент управления не имеет фокуса, но вы хотите навести его на элемент управления, вы можете добавить следующую строку.

listViewRamos.Select();

Почему Microsoft не просто добавила SelectItem() метод, который делает все это для вас, мне не под силу.

0 голосов
/ 05 июня 2017
ListViewItem.IsSelected = true;
ListViewItem.Focus();
0 голосов
/ 22 августа 2016
if (listView1.Items.Count > 0)
{
    listView1.FocusedItem = listView1.Items[0];
    listView1.Items[0].Selected = true;
    listView1.Select();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...