我有一个ListView控件,它以“详细信息”模式显示文件列表。我将允许用户同时选择一个或多个这些文件。
我想对所选文件执行一项操作,但是因为我知道只有在我知道选择了哪些文件后才会启动此操作。
澄清:
用户选择一个文件 - onSelectionFinished被触发,doThisAction(selectedFile [0])可以继续。
用户选择多个文件 - onSelectionFinished被触发,doThisAction(selectedFile [0])可以通过doThisAction(selectedFile [1])等继续进行...
我尝试使用SelectedIndexChanged但是当用户选择例如3个文件时,我的动作例程被触发6次:索引0,索引0,1,然后是指数0,1,2 - 一个非常低效的程序!
答案 0 :(得分:4)
如果您允许用户选择多个文件,那么您将无法知道用户何时done
选择,并且您肯定不会在每次选择更改时运行该操作。
您不应该尝试对选择事件做出反应,而是应该有一个按钮(或其他控件)来运行列表视图中所选项目的操作。只有用户知道他/她何时done
并且会告诉你。
答案 1 :(得分:1)
您可以限制SelectedIndexChanged
事件。如果用户未在特定时间段内更改其选择,则假设已完成并调用您的方法。有关示例,请参阅here。
但是,如果@Paul Sasik通过点击按钮的方式让用户决定何时完成,可能会更好。
答案 2 :(得分:0)
不要设置选择事件,而是让用户选择所需的项目并放置listview鼠标点击事件并检查它是否是鼠标右键,然后在里面进行工作
private void listView1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
//do work here
}
}
你可以在listview中添加一个上下文菜单,这样当用户右键单击它时会增加更多的灵活性(有关该选择的更多选项):
MenuItem menuItem1 = new MenuItem("&Copy");
MenuItem menuItem2 = new MenuItem("&Delete");
contextMenu1.MenuItems.AddRange(new MenuItem[] { menuItem1, menuItem2 });
listView1.ContextMenu = contextMenu1;