2011-04-10 48 views

回答

1

刪除一個TreeView是一個不確定的主張,用戶會希望在可能不可見丟棄的節點。無論是因爲它已摺疊並隱藏或從屏幕滾動出來。 Anyhoo,你想使用DragOver事件並檢查鼠標的位置。這是一個樣例表單。在其上放置一個樹形視圖並添加一些節點。點擊表格並拖動。它只允許在第二級節點上丟棄:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     treeView1.AllowDrop = true; 
     treeView1.DragEnter += treeView1_DragEnter; 
     treeView1.DragOver += treeView1_DragOver; 
    } 
    protected override void OnMouseDown(MouseEventArgs e) { 
     DoDragDrop("foo", DragDropEffects.Copy); 
     base.OnMouseDown(e); 
    } 
    private void treeView1_DragEnter(object sender, DragEventArgs e) { 
     // TODO: check e.Data 
     e.Effect = DragDropEffects.Copy; 
    } 
    private void treeView1_DragOver(object sender, DragEventArgs e) { 
     Point pos = treeView1.PointToClient(new Point(e.X, e.Y)); 
     var hit = treeView1.HitTest(pos); 
     TreeNode node = hit.Node; 
     if (hit.Node != null) { 
      node.Expand(); 
      if (node.Level != 1) node = null; 
     } 
     e.Effect = node != null ? DragDropEffects.Copy : DragDropEffects.None; 
    } 
}