簡體   English   中英

如何使用Ctrl鍵+鼠標單擊來選擇多個控件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM