Хотя вопрос, кажется, (и на самом деле это так) XY Проблема , но ИМО, это стальной вопрос.
По той же причине, по которой кому-то нравится PerformClick
метод Button
кому-то может понадобиться метод Activate
для Item
для программной активации элемента.Это также полезно для целей тестирования.
Правильное решение для большинства случаев
Прежде чем перейти к методу Activate
, как комментарий к ответу ОП, я должен сказать,в то время как решение, которым вы поделились, решило вашу проблему, но вот правильное решение для большинства случаев:
Лучше поместить логику в метод, подобный DoSomething(ListViewItem item){/**/}
.Затем вы можете использовать ту же логику в ItemActivate
, вызвав DoSomething(listView1.SelectedItems[0])
.Также в случае, если в какой-то другой части вашего кода вы хотите использовать ту же логику наряду с установкой выбранного элемента, достаточно установить item.Selected = true;а затем DoSomething(item)
. *
Как видите, установка выбранного элемента не является обязанностью DoSomething
, и в целом лучше обрабатывать ItemActivate
, чем полагаться на двойной щелчок.ItemActivate
будет также повышаться при двойном щелчке.
Программная активация элемента
Здесь, в этом посте, я поделюсь методом расширения для ListViewItem
дляВыполните активацию элемента программно с помощью метода Activate
, затем для активации Item
достаточно вызвать метод item.Activate()
.
using System;
using System.Reflection;
using System.Windows.Forms;
public static class ListViewItemExtensions
{
public static void Activate(this ListViewItem item)
{
if (item.ListView == null)
throw new InvalidOperationException();
var onItemActivate = item.ListView.GetType().GetMethod("OnItemActivate",
BindingFlags.NonPublic | BindingFlags.Instance);
item.Selected = true;
onItemActivate.Invoke(item.ListView, new object[] { EventArgs.Empty });
}
}