2014-05-20 91 views
0

大概这个问题已经在这里得到了答案,但我无法找到它.. 我有一个tabControl在每个标签页中的flowlayoutpanel,我可以在运行时添加控件。我可以重新排列它们,将它们跨标签页移动..我如何选择多个控件以便能够使用Ctrl +鼠标单击来移动它们?如何使用Ctrl键+鼠标点击选择多个控件?

这是迄今为止我拖事件:

private void control_DragDrop(object sender, DragEventArgs e) 
    { 
     Control target = new Control(); 

     target.Parent = sender as Control; 

     if (target != null) 
     { 
      int targetIndex = FindCSTIndex(target.Parent); 
      if (targetIndex != -1) 
      { 
       string cst_ctrl = typeof(CustomControl).FullName; 
       if (e.Data.GetDataPresent(cst_ctrl)) 
       { 
        Button source = new Button(); 
        source.Parent = e.Data.GetData(cst_ctrl) as CustomControl; 

        if (targetIndex != -1) 

         fl_panel = (FlowLayoutPanel)tabControl1.SelectedTab.Controls[0]; 
        if (source.Parent.Parent.Name == target.Parent.Parent.Parent.Name) 
        { 
         this.fl_panel.Controls.SetChildIndex(source.Parent, targetIndex); 
        } 
        else 
        { 
         target.Parent.Parent.Parent.Controls.Add(source.Parent); 
         this.fl_panel.Controls.SetChildIndex(source.Parent, targetIndex); 
        } 
       } 
      } 
     } 
    } 

    private int FindCSTIndex(Control cst_ctr) 
    { 
     fl_panel = (FlowLayoutPanel)tabControl1.SelectedTab.Controls[0]; 
     for (int i = 0; i < this.fl_panel.Controls.Count; i++) 
     { 
      CustomControl target = this.fl_panel.Controls[i] as CustomControl; 

      if (cst_ctr.Parent == target) 
       return i; 
     } 
     return -1; 
    } 
+0

这是内置于Visual Studio中的设计器的一项功能。在运行时没有任何支持,您的表单的设计器视图与可以执行诸如显示选择矩形之类的东西的叠加窗口截然不同。只要点击一个控件就会让你头痛,当然这会触发控件的MouseDown事件。 VS设计师是一个多人一年的努力,而不是你将要开始的一个SO问题。自己利用设计器[这里覆盖](http://msdn.microsoft.com/en-us/magazine/cc163634.aspx)。 –

回答

0

这不是一件容易的,也没有一个共同的任务。但是可以肯定的是,取决于先决条件可能会变得微不足道,而不需要花费多年的努力。

你有很多选择:

  • 控件支持选择;
  • 容器控制支持儿童控制选择;
  • 叠加。

处理的选择是很容易的:有一本字典(或控制的财产,可能使用Tag)如果选择与否控制存储,显示选区不知何故,当控制按Ctrl -clicked反向选择。您甚至可以提供Shift-选择键。

正如@Hans Passant所评论的那样,您可以使用叠加窗口(在所有内容的顶部隐藏窗口)在那里绘制选择标线,以及处理选择和拖动自身。或者它可以是一个自定义控件,其属性为IsSelected,该设置将绘制某些东西(边框?)以指示选择。

最简单的选择是创建SelectionPanel控件,该控件可以托管其中的任何其他控件,具有IsSelected指示并且可拖动。添加子女时订阅MouseUp/MouseDown事件,或者只有在点击了特殊区域SelectionPanel时才允许拖动。例如,您可以选择在您的软件中启用拖动,当设置全部SelectionPanel时,会显示可以拖动的特殊区域(标题?)或Ctrl -click。

相关问题