【问题标题】:Event when finished selecting items?完成选择项目时的事件?
【发布时间】:2013-07-08 22:03:17
【问题描述】:

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

我想对选定的文件执行一项操作,但我认为只有在知道选择了哪些文件后才开始执行此操作是合乎逻辑的。

澄清一下:

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

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

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

【问题讨论】:

标签: c# .net winforms listview


【解决方案1】:

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

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

【讨论】:

  • 天啊!我显然需要我的床!感谢那!添加了一个按钮控件和控制位置的随机播放,我正在做饭!干杯:-) 被接受为答案
  • @tip2tail:很高兴能帮上忙。我自己也经历过那些兔子洞。
【解决方案2】:

您可以限制SelectedIndexChanged 事件。如果用户在某个时间段内没有更改他们的选择,那么假设他们已经完成并调用您的方法。示例见here

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

【讨论】:

  • +!节流可以工作,但对人来说不是很好。用户非常难以预测,如果你尝试 think for them 他们会烧死你!
【解决方案3】:

不要设置选择事件,而是让用户选择需要的项目并放置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;

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 2018-06-08
    • 2019-01-31
    • 1970-01-01
    • 2011-02-06
    • 2011-11-21
    • 2011-12-05
    • 2014-11-19
    • 2011-09-05
    相关资源
    最近更新 更多