拖拽获得文件路径

主要是响应控件的两个事件:一个是触发鼠标拖动并进入控件区域时,一个是触发鼠标拖动到该控件区域时的释放.
拖动的对象需要从这两个事件的参数中获取,及从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;


            */ 


        }

 

转载于:https://www.cnblogs.com/because/archive/2012/06/30/2571405.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值