1

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

我有一个要对选定文件执行的操作,但是我认为只有在知道选择了哪些文件后才启动此操作,这对我来说似乎是合乎逻辑的。

澄清:

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

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

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

4

3 回答 3

4

如果您允许用户选择多个文件,那么您将不知道用户何时done选择,并且您当然不会在每次选择更改时都运行该操作。

而不是试图对选择事件做出反应,您应该有一个按钮(或其他一些控件)来对列表视图中选择的项目运行操作。只有用户知道他/她什么时候在done并且会告诉你。

于 2013-07-08T22:07:21.313 回答
1

你可以扼杀SelectedIndexChanged事件。如果用户在某个时间段内没有改变他们的选择,那么假设他们已经完成并调用你的方法。有关示例,请参见此处。

但是,您最好让用户通过单击按钮来决定他/她何时完成@Paul Sasik 所描述的操作。

于 2013-07-08T22:09:59.613 回答
0

不要设置选择事件,而是让用户选择需要的项目并放置 listview mouseclick 事件并检查它是否是鼠标右键,然后在里面做工作

        private void listView1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                //do work here
            }
        }

您可以将上下文菜单添加到列表视图中,因此当用户右键单击时,它将增加更多灵活性(关于如何处理该选择的更多选项):

        MenuItem menuItem1 = new MenuItem("&Copy");
        MenuItem menuItem2 = new MenuItem("&Delete");
        contextMenu1.MenuItems.AddRange(new MenuItem[] { menuItem1, menuItem2 });
        listView1.ContextMenu = contextMenu1;
于 2013-07-08T22:31:59.313 回答