it-swarm.com.ru

Как программно выбрать элемент в ListView?

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

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

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

57
Homam

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

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

    myListView.Select();
    

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

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

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

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

    myListView.HideSelection = false;
    
77
Cody Gray
if (listView1.Items.Count > 0)
{
    listView1.Items[0].Selected = true;
    listView1.Select();
}

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

27
VikciaR

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

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

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

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

7
bitsmuggler
        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
3
Kursat Turkay
ListViewItem.IsSelected = true;
ListViewItem.Focus();
0
user1724225

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

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

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

listViewRamos.Select();

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

0
Jonathan Wood
if (listView1.Items.Count > 0)
{
    listView1.FocusedItem = listView1.Items[0];
    listView1.Items[0].Selected = true;
    listView1.Select();
}
0
user1119399