2011-03-26 57 views
0

我在我的Windows應用程序中使用.net樹視圖控件。我已經實現了可以正常工作的拖放功能。現在,我想要顯示正在拖動的節點的文本/自定義圖像及其圖像,就像我們在窗口上拖動文件夾時看到的那樣,即我們看到文件夾的淡出圖像跟隨着光標,直到發生拖放。將n拖放到.net樹視圖

如何在.net winform應用程序中執行此操作。

感謝, Omky

+0

閱讀此:http://blog.stackoverflow.com/2010/10/vote-early-vote-often/ – 2011-03-26 07:51:10

回答

4

這裏有一個鏈接幾篇文章中,首先說明如何。
http://blogs.msdn.com/b/adamroot/archive/2008/02/19/shell-style-drag-and-drop-in-net-wpf-and-winforms.aspx

下面是使拖動效果起作用的最低限度。

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 
using ComIDataObject = System.Runtime.InteropServices.ComTypes.IDataObject; 

public static class DragDropEngine 
{ 
     public static void ProcessDragEnter(DragEventArgs e) 
     { 
      Point point = Cursor.Position; 
      WindowsPoint winpoint; 
      winpoint.X = point.X; 
      winpoint.Y = point.Y; 
      IDropTargetHelper dropHelper = (IDropTargetHelper)new DragDropHelper(); 
      dropHelper.DragEnter(IntPtr.Zero, (ComIDataObject)e.Data, 
        ref winpoint, (int)e.Effect); 
     } 
     public static void ProcessDragDrop(DragEventArgs e) 
     { 
      Point point = Cursor.Position; 
      WindowsPoint winpoint; 
      winpoint.X = point.X; 
      winpoint.Y = point.Y; 
      IDropTargetHelper dropHelper = (IDropTargetHelper)new DragDropHelper(); 
      dropHelper.Drop((ComIDataObject)e.Data, ref winpoint, (int)e.Effect); 
     } 
     public static void ProcessDragOver(DragEventArgs e) 
     { 
      Point point = Cursor.Position; 
      WindowsPoint winpoint; 
      winpoint.X = point.X; 
      winpoint.Y = point.Y; 
      IDropTargetHelper dropHelper = (IDropTargetHelper)new DragDropHelper(); 
      dropHelper.DragOver(ref winpoint, (int)e.Effect); 
     } 
     public static void ProcessDragLeave(EventArgs e) 
     { 
      IDropTargetHelper dropHelper = (IDropTargetHelper)new DragDropHelper(); 
      dropHelper.DragLeave(); 
     } 
} 
[ComImport] 
[Guid("4657278A-411B-11d2-839A-00C04FD918D0")] 
public class DragDropHelper 
{ 
} 
[ComVisible(true)] 
[ComImport] 
[Guid("4657278B-411B-11D2-839A-00C04FD918D0")] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IDropTargetHelper 
{ 
     void DragEnter(
      [In] IntPtr hwndTarget, 
      [In, MarshalAs(UnmanagedType.Interface)] 
      System.Runtime.InteropServices.ComTypes.IDataObject dataObject, 
      [In] ref WindowsPoint pt, 
      [In] int effect); 
     void DragLeave(); 
     void DragOver(
      [In] ref WindowsPoint pt, 
      [In] int effect); 
     void Drop(
      [In, MarshalAs(UnmanagedType.Interface)] 
      System.Runtime.InteropServices.ComTypes.IDataObject dataObject, 
      [In] ref WindowsPoint pt, 
      [In] int effect); 
     void Show(
      [In] bool show); 
} 
[StructLayout(LayoutKind.Sequential)] 
public struct WindowsPoint 
{ 
     public int X; 
     public int Y; 
} 
+0

感謝「bricklayer137」。文章和鏈接發現非常有用。 – Omkar 2011-03-27 11:04:11