拖放操作和文件复制小功能

一直都没试过拖放操作的用处,今天试了试,发现真的很好用!!
下面的代码没有打入注释,加入了一个ListBox,当文件拖放上来后,讲内容显示在里面

  private   void  lstFilePath_DragEnter( object  sender, DragEventArgs e)
        
{
            
if (e.Data.GetDataPresent(DataFormats.FileDrop))
            
{
                e.Effect 
= DragDropEffects.Link;
            }

            
else
            
{
                e.Effect 
= DragDropEffects.None;
            }

        }


        
private   void  lstFilePath_DragDrop( object  sender, DragEventArgs e)
        
{
            
foreach (string strPath in (string[])e.Data.GetData(DataFormats.FileDrop))
            
{
                lstFilePath.Items.Add(strPath);
            }

        }



将整个窗体代码都复制下来,是一个复制的小程序,将拖放到LISTBOX里的文件复制到文本框里指定的位置,里面用到了一个外部控件,可以使用普通的button替换之

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

namespace  PersonalDisk
{
    
public partial class frmDrag : Form
    
{
        
/// <summary>
        
/// 获得/设置一个值,判断是否已经存在了一个类的实例
        
/// </summary>

        public static bool IsExist=false;
        
        
public frmDrag()
        
{
            InitializeComponent();
            frmDrag.IsExist 
= true;
        }


        
private void frmDrag_MouseDown(object sender, MouseEventArgs e)
        
{
            
//如果鼠标指针在标题栏范围内并且按下了鼠标左键,则触发移动标题栏方法
            if (e.Button == MouseButtons.Left && e.Y <= 25)
            
{
                Program.ReleaseCapture();
                Program.SendMessage(
this.Handle, Program.WM_SYSCOMMAND, Program.SC_MOVE + Program.HTCAPTION, 0);
            }

        }


        
private void picControlClose_Click(object sender, EventArgs e)
        
{
            frmDrag.IsExist 
= false;            
            
this.Close();
        }


        
private void picControlMin_Click(object sender, EventArgs e)
        
{
            
this.WindowState = FormWindowState.Minimized;
        }


        
private void lstFilePath_DragEnter(object sender, DragEventArgs e)
        
{
            
if (e.Data.GetDataPresent(DataFormats.FileDrop))
            
{
                e.Effect 
= DragDropEffects.Link;
            }

            
else
            
{
                e.Effect 
= DragDropEffects.None;
            }

        }


        
private void lstFilePath_DragDrop(object sender, DragEventArgs e)
        
{
            
foreach (string strPath in (string[])e.Data.GetData(DataFormats.FileDrop))
            
{
                lstFilePath.Items.Add(strPath);
            }

        }


        
private void ExBtnClose_ClickEvent(object sender, EventArgs e)
        
{
            picControlClose_Click(
null,null);
        }


        
private void ExBtnClear_ClickEvent(object sender, EventArgs e)
        
{
            lstFilePath.Items.Clear();
        }


        
private void ExBtnDel_ClickEvent(object sender, EventArgs e)
        
{
            lstFilePath.Items.RemoveAt(lstFilePath.SelectedIndex);
        }


        
private void picControlBring_Click(object sender, EventArgs e)
        
{
            
if (this.TopMost == true)
            
{
                
this.TopMost = false;
                picControlBring.Image 
= PersonalDisk.Properties.Resources.btnBottom;
            }

            
else
            
{
                
this.TopMost = true;
                picControlBring.Image 
= PersonalDisk.Properties.Resources.btnTop;
            }

        }


        
private void ExBtnExecute_ClickEvent(object sender, EventArgs e)
        
{
            ExBtnExecute.CtlEnabled 
= false;

            
for (int i = 0; i < lstFilePath.Items.Count; i++)
            
{
                Application.DoEvents();
                lstFilePath.SetSelected(i, 
true);
                
                
//如果当前字符串是一个目录则.
                if (Directory.Exists(lstFilePath.Items[i].ToString()))
                
{
                    CopyDirectory(lstFilePath.Items[i].ToString(), txtSelDrive.Text 
+"\\"+ Path.GetFileName(lstFilePath.Items[i].ToString()));
                    lstFilePath.Items[i] 
= "复制完成";
                }

                
else
                
{
                    
if (!File.Exists(lstFilePath.Items[i].ToString())) continue//如果文件不存在继续下一个循环
                    File.Copy(lstFilePath.Items[i].ToString(), txtSelDrive.Text + "\\" + Path.GetFileName(lstFilePath.Items[i].ToString()));
                    lstFilePath.Items[i] 
= "复制完成";
                }

            }


            lstFilePath.Items.Clear();
            ExBtnExecute.CtlEnabled 
= true;
        }


        
private void txtSelDrive_DoubleClick(object sender, EventArgs e)
        
{
            FolderSelDialog.ShowDialog(
this);
            txtSelDrive.Text 
= FolderSelDialog.SelectedPath;
        }

        
        
/// <summary>
        
/// 复制一个目录下的所有文件或目录到一个新的目录下
        
/// </summary>
        
/// <param name="sourcePath">源目录路径</param>
        
/// <param name="destPath">目标目录路径</param>

        private void CopyDirectory(string sourcePath, string destPath)
        
{
            
try
            
{
                
//如果目标路径没有以\结尾则加之
                if (destPath[destPath.Length - 1!= Path.DirectorySeparatorChar)
                
{
                    destPath 
+= Path.DirectorySeparatorChar;
                }

                
if (!Directory.Exists(destPath))
                
{
                    Directory.CreateDirectory(destPath);
                }

                
string[] fileList = Directory.GetFileSystemEntries(sourcePath);
                
foreach (string file in fileList)
                
{
                    
//如果是一个目录则
                    if (Directory.Exists(file))
                    
{
                        CopyDirectory(file, destPath 
+ Path.GetFileName(file));
                    }

                    
else
                    
{
                        File.Copy(file, destPath 
+ Path.GetFileName(file),true);
                    }

                }

            }

            
catch(IOException ioe)
            
{
                MessageBox.Show(ioe.Message, 
"复制文件时出错", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

        }

    }

}

你可能感兴趣的:(文件复制)