[英]How to use ctrl key + mouse click to select multiple controls?
可能這個問題已經在這里找到答案了,但是我找不到它。我在每個選項卡頁面中都有一個帶有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;
}
這不是一件容易的事,也不是常見的任務。 但是,確實可行且取決於前提條件的方法可能變得微不足道,而無需花很多年的精力在上面^^。
您有很多選擇:
處理選擇非常容易:擁有字典(或控件屬性,可能使用Tag
)來存儲是否選擇控件,以Ctrl方式單擊反轉選擇時,以某種方式顯示選擇。 您甚至可以提供Shift鍵選擇。
正如@Hans Passant所評論的那樣,您可以使用覆蓋窗口(位於所有內容頂部的不可見窗口)在此處繪制選擇標線以及處理選擇並拖動自身。 或者它可以是具有屬性IsSelected
,該設置將繪制某些內容(邊框?)以指示選擇。
最簡單的選擇是創建SelectionPanel
控件,該控件可以承載內部的任何其他控件,具有IsSelected
指示並且可拖動。 添加子項后,請訂閱MouseUp
/ MouseDown
事件,或者僅在單擊SelectionPanel
特殊區域時才允許拖動。 例如,您可以在軟件中選擇“ 啟用拖動” ,設置后,所有SelectionPanel
都會顯示特殊區域(標題?),您可以拖動或按Ctrl鍵並單擊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.