Как программно запустить событие DoubleClick для определенного элемента ListView? - PullRequest
0 голосов
/ 04 июня 2018

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

Для дальнейшего объяснения,при открытии формы мне нужно вызвать событие DoubleClick для ListViewItem, находящегося в этой форме, чтобы открыть следующую форму.Я не могу найти, где указать, в какой строке мне интересно запустить это событие.

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

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

0 голосов
/ 04 июня 2018

Хотя вопрос, кажется, (и на самом деле это так) 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 });
    }
}
0 голосов
/ 04 июня 2018

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

//I dont know when u will fire this Event so we create a Dump to call our Method
MouseEventArgs f;        

//call the Method
Test_DoubleClicked(sender,e);

private void Test_DoubleClicked(object sender, MouseEventArgs e)
{
    // some code
}
...