c#中实现文件拖放打开的方法_基础应用

C#实现文件拖放并打开文件

需要知道的ListBox的两个事件:当您在控件的边界内拖动对象时,便会发生 DragEnter 事件;该事件用于确

定当前拖动的对象是不是您要放到控件上的对象。 在将一个或多个文件拖到控件上时,需要处理此事件。 这使

得在将对象拖到控件上方时,能够根据所拖动的对象显示相应的图标。 将拖动的对象释放到控件上时,会发生

DragDrop 事件。

功能描述:向ListBox拖入一个文件,ListBox显示该文件的路径,然后单击该路径,点击Open按钮打开该文件。

代码实现:

需要将ListBox的AllowDrop属性改为true,并实现它的DragEnter、DragDrop这两个事件。

复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DragDrop
{
    public partial class DragDrop : Form
    {
        public string FilePath;

        public DragDrop()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 获取ListBox的值。
        /// </summary>
        /// <returns></returns>
        public string GetListBoxItem()
        {
            string filePath = string.Empty;

            bool isSelected = IsListBoxSelected();

            if (isSelected==true)
            {
                string listBoxItemValue = lbFilePath.SelectedItem.ToString();

                filePath = listBoxItemValue;
            }
            else
            {
                MessageBox.Show("ListBox must be selected.");
            }

            return filePath;
        }

        /// <summary>
        /// ListBox内的值是否被选中。
        /// </summary>
        /// <returns></returns>
        public bool IsListBoxSelected()
        {
            bool selected;

            if (lbFilePath.SelectedIndex == -1)//SelectedIndex==-1时,表示未选中任何项。
            {
                selected = false;
            }
            else
            {
                selected = true;
            }

            return selected;
        }

        private void lbFilePath_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.All;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void lbFilePath_DragDrop(object sender, DragEventArgs e)
        {
            string[] s=(string[])e.Data.GetData(DataFormats.FileDrop,false);

            for (int i = 0; i < s.Length; i++)
            {
                lbFilePath.Items.Add(s[i]);
            }
        }

        private void btnOpenFile_Click(object sender, EventArgs e)
        {
            string filePath=GetListBoxItem();

            if (!string.IsNullOrEmpty(filePath))
            {
                System.Diagnostics.Process.Start(filePath);
            }
        }
    }
}

总结:

Data 对象的 GetData 方法返回一个字符串数组,该数组包含拖到该列表框控件中的文件的完整路径名。 可以使用此文件路径信息来执行需要对文件执行的任何操作。

补充代码:

复制代码 代码如下:

private void Form1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) 
  { 
  if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
  e.Effect = DragDropEffects.Link;  
  else e.Effect = DragDropEffects.None;  
  } 

  private void Form1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) 
  { 
  //其中label1.Text显示的就是拖进文件的文件名; 
  label1.Text = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();  
  }  

时间: 2024-11-16 10:33:26

c#中实现文件拖放打开的方法_基础应用的相关文章

c#中实现文件拖放打开的方法

private void Form1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Link; else e.Effect = DragDropEffects.None; } private void Form1_DragDrop(object sender, S

网页中flash文件的另类下载方法_应用技巧

用maxthon浏览器的朋友可以用maxthon中自带的插件来下载网页中镶嵌的flash文件,超级简单. 当然,不用这个浏览器的朋友可以下载一个,这个浏览器还是非常不错的.  首先点击"查看"-"工具栏",把里面的"扩展插件栏"前面打上对号,目的就是让它显示在浏览器上方.这时浏览器上面你会看到一个flash的小图标(图标和blog里面插入flash的那个图标是一样的,仔细看就能找到).  其次,打开镶嵌flash文件的网页,点那个小图标,选sav

ASP.NET中 Wizard 控件的使用方法_基础应用

先来看看官方介绍 使用表单收集用户输入是 Web 开发中要反复执行的一项任务.用来完成某项任务的一组表单通常称为"向导".ASP.NET Wizard 控件简化了许多与生成多个表单和收集用户输入相关联的任务.Wizard 控件提供了一种简单的机制,使您能够轻松地生成步骤.添加新步骤或重新安排步骤顺序.无需编写代码即可生成线性和非线性的导航,以及自定义控件的用户导航. Wizard控件可以用用在下列工作中: (1)收集多个步骤中的相关信息. (2)用于收集用户输入的大型Web网页可分割成

javascript中的3种继承实现方法_基础知识

使用Object.create实现类式继承 下面是官网的一个例子 //Shape - superclass function Shape() { this.x = 0; this.y = 0; } Shape.prototype.move = function(x, y) { this.x += x; this.y += y; console.info("Shape moved."); }; // Rectangle - subclass function Rectangle() {

ASP.NET中 PlaceHolder 控件的使用方法_基础应用

使用 PlaceHolder 控件可以将空容器控件放到网页中,然后在运行时动态添加.删除或遍历各子元素.该控件只呈现其子元素:它本身并没有基于 HTML 的输出. 在实际使用过程中可以向PlaceHolder添加任何Html控件,甚至包括JavaScript代码. 将 PlaceHolder 控件用作存储动态添加到网页的服务器控件的容器.PlaceHolder 控件不产生任何可见输出并且只能用作网页上其他控件的容器.可以使用 Control.Controls 集合添加.插入或移除 PlaceHo

实例讲解JavaScript中的this指向错误解决方法_基础知识

看如下对象定义: 'use strict' var jane = { name : 'Jane', display : function(){ retrun 'Person named ' + this.name; } }; 这样能正常调用 jane.display(); 下面的调用会出错: var func = jane.display; func() TypeError: Cannot read property 'name' of undefined 因为,this指向已经改变,正确的方式

ASP.NET中 Panel 控件的使用方法_基础应用

Panel 控件在 ASP.NET 网页中提供一种容器控件,可以将它用作静态文本和其他控件的父控件. 一.常见 Panel 属性 属性 描述 HorizontalAlign 指定子控件在面板内的对齐方式(左对齐.右对齐.居中或两端对齐). Wrap 指定面板内过宽的内容是要换到下一行,还是要在面板边缘处截断. ScrollBars 如果已经通过设置 Height 和 Width 属性将 Panel 控件限制为特定的大小,则可以通过设置 ScrollBars 属性来添加滚动条. GroupingT

讲解JavaScript中for...in语句的使用方法_基础知识

 这里是JavaScript支持的另外一个循环.它被称为for...in循环.这个循环是用于循环一个对象的属性. 因为我们还没有讨论的对象,所以使用这一循环可能会感觉不太明白.但是,一旦你会对JavaScript对象了解后,那么会发现这个循环非常有用.语法 for (variablename in object){ statement or block to execute } 从对象每次迭代一个属性分配给变量名(variablename),这个循环持续到该对象的所有属性都用尽.例子: 下面是打

JavaScript中Number.MAX_VALUE属性的使用方法_基础知识

Number.MAX_VALUE 属性属于静态Number对象.这代表了最大可能的正数的JavaScript可以一起工作的常量. 该常量有实际的值为 语法 可以使用以下语法访问该值: var val = Number.MAX_VALUE; 示例 : 这里是表示属性的使用的例子. <html> <head> <script type="text/javascript"> <!-- function showValue() { var val =