拖拽获得文件路径

主要是响应控件的两个事件:一个是触发鼠标拖动并进入控件区域时,一个是触发鼠标拖动到该控件区域时的释放.
拖动的对象需要从这两个事件的参数中获取,及从e中获得.
        ///先要把接受拖放功能的控件的AllowDrop功能打开.

        this.textBox2.AllowDrop = true;
        this.textBox2.Multiline = true;
        private void textBox2_DragDrop(object sender, DragEventArgs e)
        {
            ///创建一个数组类,用于保存拖动进来的数据组,这里是文件名路径的数组(多个文件拖进来的情况)
            ///e.Data.GetData方法就是获取文件名数组的功能,参数是决定关联哪种数据格式.
            ///这里运用了把 Object 强制转换为 Array 的特点.
            Array aryFiles = ((System.Array)e.Data.GetData(DataFormats.FileDrop));
            for (int i = 0; i < aryFiles.Length; i++)
            {
                ///通过For循环把所有文件路径加到字符串label4.text里面.
                label4.Text = aryFiles.GetValue(i).ToString();// +Environment.NewLine;
                
            }

            path = label4.Text;

        }

        private void textBox2_DragEnter(object sender, DragEventArgs e)
        {
            ///拖进来时,判断拖动的数据是否是指定数据格式,并设置e.Effect的图标样式.
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                e.Effect = DragDropEffects.Move;
            else e.Effect = DragDropEffects.None;

            //这里说明一下,e传进来的数据,我个人觉得应用这样判断,因为其原理是:应该用e.AllowedEffect.ToString()来判断总共源(发起方)支持哪些拖放操作.
            //如果发起方支持多种拖放操作时,用上面的判断就要注意选择结果的唯一性.否则前面的拖放样式就很可能由于本发起方有多种拖放操作及满足MOVE又满足
            //LINK而又去选择后面代码中的拖放效果,从而使其前面代码应该拥有的脱发效果失效,最终不能实现拖放操作.
            /*
 

              比较清晰的判断方式可以用下面这种判断方法:

              

            if (e.AllowedEffect.ToString().Contains("Copy") && !e.AllowedEffect.ToString().Contains("Link"))
                e.Effect = DragDropEffects.Copy;

            if (e.AllowedEffect.ToString() == "Link")
                e.Effect = DragDropEffects.Link;


            */ 


        }

 

posted @ 2012-06-30 22:06  璇星  阅读(3276)  评论(0编辑  收藏  举报