簡體   English   中英

.NET 2.0 C#Treeview在TreeNodes中的拖放

[英].NET 2.0 C# Treeview Drag/Drop within TreeNodes

我對捕獲拖放事件感興趣,該事件將從用戶將現有TreeNode拖動到TreeView中的某處開始。 當用戶拖動TreeNode時,我對捕獲何時在兩個樹節點之間拖動節點感興趣。 當用戶執行此操作時,我想在樹節點之間顯示一個哈希標記,以指定該節點是作為子節點還是同級節點放置在節點中。 此哈希標記將顯示以下任一值:-在目標節點下方(以指示源節點將作為目標節點的子節點被丟棄),或-在目標節點下方(以指示源節點將被替代的節點作為兄弟節點)目標節點)之前或之后...

我使用DragOver事件取得了一些進展。 我正在計算鼠標的位置,並在拖動鼠標時推導出頂部和底部的節點。

        int threshold = 8;  //Joe(hack)
        Point mouseLocation = mouseLocation = treeViewConditions.PointToClient(new Point(e.X, e.Y - threshold));
        TreeNode topNode = treeViewConditions.GetNodeAt(mouseLocation);
        mouseLocation = treeViewConditions.PointToClient(new Point(e.X + threshold, e.Y));
        TreeNode bottomNode = treeViewConditions.GetNodeAt(mouseLocation);

        if (topNode != null && bottomNode == null)
        {
            textBoxDescription.Text = "handling top node";
        }
        else if (topNode == null && bottomNode != null)
        {
            textBoxDescription.Text = "handling bottom node";
        }
        else if (topNode != null && bottomNode != null)
        {
            if (topNode != bottomNode)
            {
                textBoxDescription.Text = "between!";
            }
            else if (topNode == bottomNode)
            {
            }
        }

但是,這樣做只會感覺很臟。 我想知道是否有人知道更好的方法來完成此任務。

在此先感謝一噸!

繪制“哈希標記”將是真正的問題。 TreeView具有DrawMode屬性,但其DrawItem事件不允許您在節點之間進行繪制。

您需要通過更改光標以指示將要發生的事情來進行處理。 使用GiveFeedback事件,將e.UseCustomCursors設置為false,並將Cursor.Current分配給表示該操作的自定義光標。

本文闡述了相同的問題,並提供了一種與您已經在遵循的方法有些相似的方法(但閾值本質上是樹節點的高度的百分比)。 基於此,以及我之前做過的那件事,這是我能找到的最佳方法,我認為您基本上已經步入正軌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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