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