我正在尝试以编程方式在Windows窗体DoubleClick
的特定项目上触发ListView
事件,但似乎无法找到如何执行此操作。
为了进一步解释,在打开表单后,我需要在该表单上的DoubleClick
上触发ListViewItem
事件,以打开下一个表单。我无法找到在哪里指出我对触发该事件感兴趣的行。
答案 0 :(得分:0)
嗯,我不知道你为什么需要这个,但是通过这种方式你可以解雇双击程序:
//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
}
答案 1 :(得分:0)
我设法弄明白我错过了什么。在触发事件之前,需要设置Listview的所选项目。
答案 2 :(得分:0)
虽然这个问题似乎是(实际上是)XY Problem,但IMO是一个有效的问题。
出于同样的原因,某人喜欢Button
Activate
方法的某个人可能希望Item
方法Activate
以DoSomething(ListViewItem item){/**/}
方式以编程方式激活该项目。它也可用于测试目的。
大多数情况下的正确解决方案
在跳转到ItemActivate
方法之前,作为对OP答案的评论,我应该说,虽然您分享的解决方案已经解决了您的问题,但对于大多数情况,这是正确的解决方案:
将逻辑放在像DoSomething(listView1.SelectedItems[0])
这样的方法中会更好。然后,您可以通过调用DoSomething(item)
在DoSomething
中重复使用相同的逻辑。同样,如果在代码的其他部分中你想要使用相同的逻辑以及将项目设置为选中,那么它足以设置item.Selected = true;然后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 });
}
}
,它&#39} ; s足以调用{{1}}方法。
{{1}}