一、前提
将控件的AllowDrog属性设置为True;
为该控件添加事件DragDrop和DragEnter两个事件;
二、使用范例
private void Form_DragEnter(object sender, DragEventArgs e) { dragEnter(e); } private void Form_DragDrop(object sender, DragEventArgs e) { TextBox textBox = sender as TextBox; textBox.Text = dragDrop(e); } /// <summary> /// 文件拖进事件处理: /// </summary> public void dragEnter(DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) //判断拖来的是否是文件 e.Effect = DragDropEffects.Link; //是则将拖动源中的数据连接到控件 else e.Effect = DragDropEffects.None; } /// <summary> /// 文件放下事件处理: /// 放下, 另外需设置对应控件的 AllowDrop = true; /// 获取的文件名形如 "d:\1.txt;d:\2.txt" /// </summary> public string dragDrop(DragEventArgs e) { StringBuilder filesName = new StringBuilder(""); Array file = (System.Array)e.Data.GetData(DataFormats.FileDrop);//将拖来的数据转化为数组存储 foreach (object I in file) { string str = I.ToString(); System.IO.FileInfo info = new System.IO.FileInfo(str); //若为目录,则获取目录下所有子文件名 if ((info.Attributes & System.IO.FileAttributes.Directory) != 0) { str = getAllFiles(str); if (!str.Equals("")) filesName.Append((filesName.Length == 0 ? "" : ";") + str); } //若为文件,则获取文件名 else if (System.IO.File.Exists(str)) filesName.Append((filesName.Length == 0 ? "" : ";") + str); } return filesName.ToString(); } /// <summary> /// 判断path是否为目录 /// </summary> public bool IsDirectory(String path) { System.IO.FileInfo info = new System.IO.FileInfo(path); return (info.Attributes & System.IO.FileAttributes.Directory) != 0; } /// <summary> /// 获取目录path下所有子文件名 /// </summary> public string getAllFiles(String path) { StringBuilder str = new StringBuilder(""); if (System.IO.Directory.Exists(path)) { //所有子文件名 string[] files = System.IO.Directory.GetFiles(path); foreach (string file in files) str.Append((str.Length == 0 ? "" : ";") + file); //所有子目录名 string[] Dirs = System.IO.Directory.GetDirectories(path); foreach (string dir in Dirs) { string tmp = getAllFiles(dir); //子目录下所有子文件名 if (!tmp.Equals("")) str.Append((str.Length == 0 ? "" : ";") + tmp); } } return str.ToString(); }
已有 4393 位网友参与,快来吐槽:
发表评论