我想解决这样一个问题:
    将TreeView的一个节点拖到一个文件夹下,释放鼠标后,程序能检测到鼠标所落到的文件夹的路径。

解决方案 »

  1.   

    TreeView1.SelectedImageUrl = "选中文件夹的路径";
      

  2.   

    再次将帖子提前,请高手指教: 
        将TreeView的一个节点 拖到 窗体外的Windows资源管理器的一个文件夹下,释放鼠标后,如何让程序能检测到鼠标所落到的文件夹的路径。
      

  3.   

    To:yegucheng
       我想让程序自动监测到
      

  4.   

    关注。不过我觉得你可以跟踪鼠标位置(tracemouse),然后用API获得当前文件夹的位置。
      

  5.   

    To:singleflower
        鼠标已拖出窗体如何跟踪,tracemouse是什么,请指教,
        谢谢!
      

  6.   

    看来要用hook技术了,而且得用全局hook
      

  7.   

    我还没想到什么好的办法
    我认为通过调用系统api获取系统当前信息应该不会错
      

  8.   

    To:cacacy(卡卡西) 上哪找100 C# 范例,我在微软官方网站上找了半天也没找到,给各连接好吗,谢谢!
      

  9.   

    int a=((System.Array)e.Data.GetData(DataFormats.FileDrop)).Length;
    label1.Text="";
    for(int i=0;i<a;i++)
    {
    label1.Text += ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(i).ToString(); 
    }
      

  10.   

    To  xzhy80:
        你这是拖进来的代码,我要的是拖出去的代码
      

  11.   

    不知TreeView是否有Mouse这样的事件学习ING......
      

  12.   

    int a=((System.Array)e.Data.GetData(DataFormats.FileDrop)).Length;
    label1.Text="";
    for(int i=0;i<a;i++)
    {
    label1.Text += ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(i).ToString(); 
    }
    int a=((System.Array)e.Data.GetData(DataFormats.FileDrop)).Length;
    label1.Text="";
    for(int i=0;i<a;i++)
    {
    label1.Text += ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(i).ToString(); 
    }
    int a=((System.Array)e.Data.GetData(DataFormats.FileDrop)).Length;
    label1.Text="";
    for(int i=0;i<a;i++)
    {
    label1.Text += ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(i).ToString(); 
    }
      

  13.   

    To:silverseven7
        看准题目阿,我是要拖出窗体,触发那个事件,在事件中如何判断
      

  14.   

    To: silverseven7
        看准题目啊,我是要拖出窗体,落到资源管理器上的一个文件夹上,触发那个事件,事件中的代码!
      

  15.   

    用API WindowFromPoint 得到鼠标释放的时候的窗口
    如果是 资源管理器 那么就获得路径!===============================
    http://qqwwee.com/csdn.rar
    CSDN小助手
      

  16.   

    如果说100 C# 例子有这个演示,很想知道在哪里有,
    其他方法好像都不行 包括在 mouseMove中判读我也很想知道,给楼主顶一下
      

  17.   

    法帖发出12天没人能打得上来,难道此方真的没有高人了吗??
    UltraISO很好的解决了真个问题,谁知道是如何实现的??
        谢谢!
      

  18.   

    刚才挂个 UltraISO 大概看一下,这个拖放操作之后是交给 Windows 去做的,另外纠正一下楼上有人所说的钩子,楼主不要以这种思路去复杂化思考问题,UltraISO.exe 中根本没有调用任何 Hook。没太多时间仔细去分析,有时间可以试试……
      

  19.   

    微软例子中也只有把文件拖到窗口的实例,没有拖出动的,还有用HOOK也好象无法实现,我得到的窗口标题全是FolderView
      

  20.   

    To  lovevsnet(编程一把手):
    谢谢!好久没人回复了。高手在哪里啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  21.   

    楼主,今天抽空试了一下,用HOOK好象也行,可以先用WindowFromPoint得到鼠标所在文件夹的句柄hfolder
    当然用GetWindowText(hfolder,cap,len);
    GetClassName(hfolder,class,len)得到的是标题:FolderView
    类名:SysListView32
    我用GetParent两次得到刚好是文件夹所在的窗口
    IntPtr hp=GetParent(hfolder);
    hp=GetParent(hp);
    再用GetWindowText就得到文件夹的名称了
    笨办法,不知道对你有无启发
    还有文件夹窗口中的SysListView32
    还有几种操作,具体你可参考:
    http://dev.csdn.net/article/64/64439.shtm
    http://www.hosp.ncku.edu.tw/~cww/html/q00535.html
    还有,你那样做是为了什么,告诉我吧,毕竟我化了好多时间帮你测
    试了,如果你不会HOOK,你到thecodeproject下载一个
      

  22.   

    To lovevsnet(编程一把手) :
        真诚感谢您的帮助,谢谢!
        用途:我公司在后台为每个员工开了500MB的空间用于存储和备份重要资料,后来发现这种办法使网络上病毒横行,现在想做一个网路硬盘,后台用SQL Server 2000,前台需要将文件拖进来或拖出去。
        再次感谢你的指导,今天我就试一下。
      

  23.   

    对了,你还可以通过重写WndProc
    捕获鼠标事件,比如WM_MOUSEMOVE时处理你的事件,这样不用HOOK也成
    以前要是写过象SPY++之类的就一定知道,我以前用别的语言写时就没用HOOK
    不过这几个API函数是一定得用到:
    WindowFromPoint
    GetWindowText
    GetParent
    这几天没事,用C#写WINSPY,就用两种方法,一种用HOOK,一种没用HOOK
      

  24.   

    To lovevsnet(编程一把手) :
        上个星期我公司进行共产党员先进性教育,没时间编程,今天按老兄的指点式了一下,已经将标题:FolderView 和 类名:SysListView32 取了出来;
        接下来我用 SendMessage 想读取节点的地址,但没能成功,代码如下,请给以指教:
    public const int LVM_FIRST = 0x1000;  //&H1000;
    //网上参数的定义是 LVM_FIRST &H1000,不知上面我用C#的表示是否正确?
    public const int LVM_GETITEMTEXTW = (LVM_FIRST + 115);
    public const int LVM_GETITEMTEXT = LVM_GETITEMTEXTW;
    [DllImport("user32.dll", EntryPoint="SendMessage",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
    public static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, out System.Text.StringBuilder lParam);const int bufferSize = 1024; 
    System.Text.StringBuilder path=new System.Text.StringBuilder(bufferSize);
    SendMessage(hFolder,LVM_GETITEMTEXT,0,out path);不知以上思路是否可行??
    谢谢!
      

  25.   

    以上思路在WIN2K以上版本可能不行,请参考:
    http://www.codeproject.com/threads/int64_memsteal.asp
    就算你能得到ITEMTEXT又能怎么样呢?
    你还是得不到这个文件夹的名称啊,留下QQ,我可以送你我的WINSPY,不过也希望能看看你的网络硬盘
    我以前网上下载了一个,是WEBFORM的,被我弄丢了,你是WINFORM的吧,刚好也可以学学,可以吗?