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


    一直都没试过拖放操作的用处,今天试了试,发现真的很好用!!
    下面的代码没有打入注释,加入了一个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);
                }

            }

        }

    }
  • 相关阅读:
    算法
    用python代码编写象棋界面,棋盘覆盖问题
    深浅拷贝的原理
    MongoDB简介,安装,增删改查
    DBUtils-Python数据库连接池
    websocket
    Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
    跨域
    最长公共子序列/子串 LCS(模板)
    寒假作业---蓝桥杯---DFS
  • 原文地址:https://www.cnblogs.com/top5/p/1723512.html
Copyright © 2020-2023  润新知