【发布时间】:2014-07-08 08:33:05
【问题描述】:
可能这个问题在这里已经有了答案,但我没能找到它.. 我在每个标签页中有一个带有 flowlayoutpanel 的 tabControl,我可以在运行时添加控件。我可以重新排列它们,在标签页之间移动它们。如何选择多个控件以便能够使用 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;
}
【问题讨论】:
-
这是 Visual Studio 中内置的设计器的一项功能。在运行时对此没有任何支持,表单的设计器视图与覆盖窗口完全不同,它可以执行诸如显示选择矩形之类的操作。仅仅点击一个控件就已经让你头疼了,这当然会触发控件的 MouseDown 事件。 VS 设计器是一项多年的努力,而不是您将从 SO 问题开始的东西。自己利用设计师是covered here。
标签: c# drag-and-drop keyboard keyboard-shortcuts