完成选择项目后的事件?

时间:2013-07-08 22:03:17

标签: c# .net winforms listview

我有一个ListView控件,它以“详细信息”模式显示文件列表。我将允许用户同时选择一个或多个这些文件。

我想对所选文件执行一项操作,但是因为我知道只有在我知道选择了哪些文件后才会启动此操作。

澄清:

用户选择一个文件 - onSelectionFinished被触发,doThisAction(selectedFile [0])可以继续。

用户选择多个文件 - onSelectionFinished被触发,doThisAction(selectedFile [0])可以通过doThisAction(selectedFile [1])等继续进行...

我尝试使用SelectedIndexChanged但是当用户选择例如3个文件时,我的动作例程被触发6次:索引0,索引0,1,然后是指数0,1,2 - 一个非常低效的程序!

3 个答案:

答案 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;