2011-04-10 6 views
0

사용자가 마우스의 아이콘을 변경하여 잘못된 노드 수준으로 끌려고한다는 것을 사용자에게 나타내려고합니다. 이걸 처리 할 수없는 것 같은데 ... 어떤 제안이 있니?winform treeview Dragdrop 효과

답변

1

트 리뷰에서 삭제 것은 불확실한 제안, 사용자가 표시되지 않을 수에 드롭 할 것이다 노드입니다. 화면이 접히거나 숨겨 지거나 화면에서 스크롤되기 때문입니다. Anyhoo, DragOver 이벤트를 사용하여 마우스의 위치를 ​​확인하려고합니다. 다음은이를 수행하는 샘플 양식입니다. 트리 뷰를 삭제하고 노드를 추가하십시오. 양식을 클릭하고 드래그하십시오. 2 차 레벨 노드에서만 드롭을 허용합니다 :

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; 
    } 
}