2013-07-08 73 views
1

我有一个ListView控件,它以“Details”模式显示文件列表。我将允许用户同时选择一个或多个这些文件。完成选择项目时的事件?

我有一个行动,我想对选定的文件进行,但因为我知道什么文件被选中后才启动这个动作似乎是合乎逻辑的。

澄清:

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

用户选择多个文件 - onSelectionFinished被发射以及doThisAction(selectedFile [0])可前进通过doThisAction follwed(selectedFile [1])等...

我已经采用的SelectedIndexChanged尝试,但当用户选择例如3个文件,我的操作例程被激发6次:索引0,索引0,1,然后索引0,1,2 - 一个非常低效的程序!

+2

我编辑了你的标题。请参见“[应的问题包括‘标签’,在他们的头衔?(http://meta.stackexchange.com/questions/19190/)”,这里的共识是“不,他们不应该”。 –

+0

@JohnSaunders谢谢。我不知道这个惯例。我将来会!非常感谢:-) – tip2tail

回答

4

如果您允许用户选择多个文件,那么你就不会知道当用户done选择,你肯定不会去与每一个选择更改运行操作。

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

+0

D'oh!我显然需要我的床!感谢那!一个按钮控制添加和控制位置的洗牌,我正在烹饪!欢呼声:-)接受答复 – tip2tail

+0

@ tip2tail:很高兴能有所帮助。我自己一直在那些兔子洞下。 –

1

您可以扼制SelectedIndexChanged事件。如果用户在特定的时间段内没有改变他们的选择,那么假定他们已经完成并调用您的方法。一个例子见here

但是,让用户根据@Paul Sasik的描述通过按钮单击来决定他/她何时完成可能会更好。

+0

+!节流可以起作用,但对人不太好。用户吓坏了,如果你想“为他们着想”,他们会烧你! –

0

不要设置选择事件,而不是让用户选择需要的物品,并把ListView的鼠标点击事件,并检查它的右mousebutton了,里面做的工作

 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; 
相关问题