拖动多个选定的控件

我在WinForms Form上有一个UserControl ,可以动态创建多个实例。 如果我选择它,我可以拖动它。 现在,我想,如果我选择多个UserControls(使用ctrl +按钮单击),可以同时拖动所有这些。

我能像我为一个UserControl那样做吗?

我到现在为止尝试过的事情:

 // For dragging I use this method and also I have // overridden MouseUp,MouseDown,MouseMove from .net public void StartDrag() { dragging = true; Point p = PointToClient(Cursor.Position); dragStart = new Point(Math.Max(0, pX), Math.Max(0, pY)); buttondrag.Capture = true; } private void Usercontrol1_SelectedChanged(object sender, EventArgs e) { if (((UserControl)sender).Selected) { if (SelectedUserControl.Count > 1) { foreach (UserControl c in panel1.Controls) { c.StartDrag(); } } } } 

//将控件放在面板中,然后使用此类。

  class ControlMover { public enum Direction { Any, Horizontal, Vertical } public static void Init(Control control) { Init(control, Direction.Any); } public static void Init(Control control, Direction direction) { Init(control, control, direction); } public static void Init(Control control, Control container, Direction direction) { bool Dragging = false; Point DragStart = Point.Empty; control.MouseDown += delegate(object sender, MouseEventArgs e) { Dragging = true; DragStart = new Point(eX, eY); control.Capture = true; }; control.MouseUp += delegate(object sender, MouseEventArgs e) { Dragging = false; control.Capture = false; }; control.MouseMove += delegate(object sender, MouseEventArgs e) { if (Dragging) { if (direction != Direction.Vertical) container.Left = Math.Max(0, eX + container.Left - DragStart.X); if (direction != Direction.Horizontal) container.Top = Math.Max(0, eY + container.Top - DragStart.Y); } }; } } public Form1() { InitializeComponent(); ControlMover.Init(this.panel1); ControlMover.Init(this.panel1, ControlMover.Direction.Vertical); } 

如果您希望在按下ctrl +键时激活程序,则需要查看键挂钩,然后在按键事件中设置一些代码,告诉程序选择所有项目。 如果您是新的密钥钩子,这是非常先进和难以做的,但这里是关键钩子的链接。 祝好运!

http://www.codeproject.com/Articles/19004/A-Simple-C-Global-Low-Level-Keyboard-Hook