zoukankan      html  css  js  c++  java
  • C#winform中ListView的使用

    使用ListView模仿Windows系统的资源管理器界面,实现文件(夹)的浏览、重命名、删除及查询等功能,主要功能界面展示如下:

    1.MainForm.cs及MainForm.Designer.cs

      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Text;
      8 using System.Windows.Forms;
      9 using System.IO;
     10 
     11 namespace Controls
     12 {
     13     public partial class MainForm : Form
     14     {
     15         #region 成员变量
     16         /// <summary>
     17         /// 用于递归计算文件夹大小
     18         /// </summary>
     19         private long folderSize = 0;
     20 
     21         /// <summary>
     22         ///打开文件夹根路径
     23         /// </summary>
     24         private string rootPath = string.Empty;
     25         #endregion
     26 
     27         #region 初期化
     28         /// <summary>
     29         /// 默认构造函数
     30         /// </summary>
     31         public MainForm()
     32         {
     33             InitializeComponent();
     34             //给窗体注册键盘事件
     35             this.KeyPreview = true;
     36         }
     37 
     38         /// <summary>
     39         /// 初始化窗体,绑定事件
     40         /// </summary>
     41         /// <param name="sender"></param>
     42         /// <param name="e"></param>
     43         private void MainForm_Load(object sender, EventArgs e)
     44         {
     45             this.大图标ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
     46             this.详细信息ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
     47             this.平铺ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
     48             this.小图标ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
     49             this.列表ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
     50         }
     51         #endregion
     52 
     53         #region 事件处理
     54         /// <summary>
     55         /// 搜索框符合条件的文件夹或文件
     56         /// </summary>
     57         /// <param name="sender"></param>
     58         /// <param name="e"></param>
     59         private void btnSearch_Click(object sender, EventArgs e)
     60         {
     61             AddItemsToListView(txtPath.Text, txtSearch.Text.Trim());
     62             AddHeaderToListView(this.lvwData);
     63         }
     64 
     65         /// <summary>
     66         /// 给搜索框添加Enter快捷键
     67         /// </summary>
     68         /// <param name="sender"></param>
     69         /// <param name="e"></param>
     70         private void MainForm_KeyDown(object sender, KeyEventArgs e)
     71         {
     72             //搜索框获得焦点且按下Enter键时,执行搜索
     73             if (txtSearch.Focused && e.KeyCode == Keys.Enter)
     74             {
     75                 this.btnSearch_Click(sender, e);
     76             }
     77         }
     78 
     79         /// <summary>
     80         /// 返回上级目录
     81         /// </summary>
     82         /// <param name="sender"></param>
     83         /// <param name="e"></param>
     84         private void btnUp_Click(object sender, EventArgs e)
     85         {
     86             if (txtPath.Text == rootPath || !txtPath.Text.Contains("\"))
     87             {
     88                 return;
     89             }
     90             //找到文件夹上级目录的绝对路径
     91             txtPath.Text = txtPath.Text.Substring(0, txtPath.Text.LastIndexOf("\"));
     92             AddItemsToListView(txtPath.Text);
     93             AddHeaderToListView(this.lvwData);
     94         }
     95 
     96         /// <summary>
     97         /// 打开文件夹,显示文件夹
     98         /// </summary>
     99         /// <param name="sender"></param>
    100         /// <param name="e"></param>
    101         private void btnFolder_Click(object sender, EventArgs e)
    102         {
    103             DialogResult dr = fbdData.ShowDialog();
    104             string path = fbdData.SelectedPath.ToString();
    105             if (dr == DialogResult.OK && path != "")
    106             {
    107                 rootPath = path;
    108                 txtPath.Text = path;
    109             }
    110         }
    111 
    112         /// <summary>
    113         /// 新建文件夹,选中文件夹
    114         /// </summary>
    115         /// <param name="sender"></param>
    116         /// <param name="e"></param>
    117         private void btnAdd_Click(object sender, EventArgs e)
    118         {
    119             string fullpath = string.Empty;
    120             AddForm addForm = new AddForm(btnAdd.Text);
    121             addForm.ShowDialog();
    122             if (addForm.ButtonFlag)
    123             {
    124                 fullpath = txtPath.Text + "\" + addForm.TxtName;
    125             }
    126             else
    127             {
    128                 return; //排除关闭窗口异常
    129             }
    130             try
    131             {
    132                 if (Directory.Exists(fullpath))
    133                 {
    134                     MessageBox.Show("该文件名已经存在!", "提示");
    135                     return;
    136                 }
    137                 Directory.CreateDirectory(fullpath);
    138                 AddItemsToListView(txtPath.Text);
    139                 AddHeaderToListView(this.lvwData);
    140             }
    141             catch (NullReferenceException ex)
    142             {
    143                 MessageBox.Show(ex.Message, "提示");
    144             }
    145             finally
    146             {
    147                 //选中新增的项,并显示在视野范围内
    148                 for (int i = 0; i < lvwData.Items.Count; i++)
    149                 {
    150                     if (lvwData.Items[i].Tag.ToString() == fullpath)
    151                     {
    152                         //先设置ListView选中
    153                         lvwData.Focus();
    154                         lvwData.Items[i].Selected = true;
    155                         //在视野范围内显示
    156                         lvwData.EnsureVisible(i);
    157                         break;
    158                     }
    159                 }
    160             }
    161         }
    162 
    163         /// <summary>
    164         /// 重命名文件夹
    165         /// </summary>
    166         /// <param name="sender"></param>
    167         /// <param name="e"></param>
    168         private void btnRename_Click(object sender, EventArgs e)
    169         {
    170             if (lvwData.SelectedItems.Count <= 0)
    171             {
    172                 return;
    173             }
    174             string fullName = lvwData.SelectedItems[0].Tag.ToString();
    175             string path = fullName.Substring(0, fullName.LastIndexOf("\") + 1);//文件路径
    176             string suffix = GetSuffixName(fullName);//后缀名
    177             //文件名或文件夹名
    178             string fileName = string.Empty;
    179             if (suffix != string.Empty)
    180             {
    181                 fileName = fullName.Substring(fullName.LastIndexOf("\") + 1,
    182                         fullName.LastIndexOf(".") - fullName.LastIndexOf("\") - 1);//文件名
    183             }
    184             else
    185             {
    186                 fileName = fullName.Substring(fullName.LastIndexOf("\") + 1);//文件夹名
    187             }
    188             string fullPath = string.Empty;
    189             AddForm addForm = new AddForm(btnRename.Text, fileName);
    190             addForm.ShowDialog();
    191             if (suffix != string.Empty)
    192             {
    193                 fullPath = path + addForm.TxtName + "." + suffix;
    194             }
    195             else
    196             {
    197                 fullPath = path + addForm.TxtName;
    198             }
    199             //直接关闭窗口时
    200             if (!addForm.ButtonFlag)
    201             {
    202                 return;
    203             }
    204             try
    205             {
    206                 //重命名文件夹
    207                 if (suffix == string.Empty)
    208                 {
    209                     if (Directory.Exists(fullPath))
    210                     {
    211                         MessageBox.Show("该文件名已经存在!", "提示");
    212                         return;
    213                     }
    214                     Directory.Move(fullName, fullPath);
    215                 }
    216                 //重命名文件
    217                 else
    218                 {
    219                     if (File.Exists(fullPath))
    220                     {
    221                         MessageBox.Show("该文件名已经存在!", "提示");
    222                         return;
    223                     }
    224                     File.Move(fullName, fullPath);
    225                 }
    226                 AddItemsToListView(txtPath.Text);
    227                 AddHeaderToListView(this.lvwData);
    228             }
    229             catch (NullReferenceException ex)
    230             {
    231                 MessageBox.Show(ex.Message);
    232             }
    233         }
    234 
    235         /// <summary>
    236         /// 删除文件夹
    237         /// </summary>
    238         /// <param name="sender"></param>
    239         /// <param name="e"></param>
    240         private void btnDelete_Click(object sender, EventArgs e)
    241         {
    242             int count = lvwData.SelectedItems.Count;
    243             if (count <= 0)
    244             {
    245                 return;
    246             }
    247             DialogResult result = MessageBox.Show("你确定删除这" + count + "项吗?", "提示",
    248                                     MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    249             if (result == DialogResult.Yes)
    250             {
    251                 string path;
    252                 ListViewItem selectitem;
    253                 for (int i = 0; i < lvwData.SelectedItems.Count; ) //此处不能i++
    254                 {
    255                     selectitem = lvwData.SelectedItems[i];
    256                     path = selectitem.Tag.ToString();
    257                     lvwData.Items.Remove(selectitem);
    258                     if (File.Exists(path))
    259                     {
    260                         File.Delete(path);
    261                     }
    262                     else if (Directory.Exists(path))
    263                     {
    264                         Directory.Delete(path, true);
    265                     }
    266                     lvwData.Update();
    267                 }
    268             }
    269         }
    270 
    271         /// <summary>
    272         /// List选中项时发生
    273         /// </summary>
    274         /// <param name="sender"></param>
    275         /// <param name="e"></param>
    276         private void lvwData_ItemActivate(object sender, EventArgs e)
    277         {
    278             ListView lv = (ListView)sender;
    279             if (lv.SelectedItems.Count <= 0)
    280             {
    281                 return;
    282             }
    283             string filename = lv.SelectedItems[0].Tag.ToString();
    284             //如果是文件夹,就打开它
    285             if (Directory.Exists(filename))
    286             {
    287                 AddItemsToListView(filename);
    288                 AddHeaderToListView(this.lvwData);
    289                 //获取打开的文件夹路径
    290                 txtPath.Text = filename;
    291             }
    292             //如果是文件,就执行它
    293             else
    294             {
    295                 System.Diagnostics.Process.Start(filename);
    296             }
    297         }
    298 
    299         /// <summary>
    300         /// 根据路径,获取ListView中的显示项
    301         /// </summary>
    302         /// <param name="sender"></param>
    303         /// <param name="e"></param>
    304         private void txtPath_TextChanged(object sender, EventArgs e)
    305         {
    306             AddItemsToListView(txtPath.Text);
    307             AddHeaderToListView(this.lvwData);
    308         }
    309 
    310         /// <summary>
    311         /// ListView列表显示样式
    312         /// </summary>
    313         /// <param name="sender"></param>
    314         /// <param name="e"></param>
    315         private void ToolStripMenuItem_Click(object sender, EventArgs e)
    316         {
    317             ToolStripMenuItem tsMenumItem = sender as ToolStripMenuItem;
    318             if (tsMenumItem.Checked)
    319             {
    320                 return;//已经选中则返回
    321             }
    322             else
    323             {
    324                 //清除勾选的右键菜单项
    325                 ClearCheckState(cmsStyle);
    326                 //勾选选中的右键菜单项
    327                 tsMenumItem.Checked = true;
    328             }
    329             switch (tsMenumItem.Text)
    330             {
    331                 case "大图标":
    332                     lvwData.View = View.LargeIcon;
    333                     break;
    334                 case "详细信息":
    335                     lvwData.View = View.Details;
    336                     break;
    337                 case "小图标":
    338                     lvwData.View = View.SmallIcon;
    339                     break;
    340                 case "列表":
    341                     lvwData.View = View.List;
    342                     break;
    343                 case "平铺":
    344                     lvwData.View = View.Tile;
    345                     break;
    346             }
    347         }
    348 
    349         /// <summary>
    350         /// 清除勾选的右键菜单项
    351         /// </summary>
    352         /// <param name="cms">右键菜单</param>
    353         /// <param name="clearAll">是否全部清除</param>
    354         private void ClearCheckState(ContextMenuStrip cms, bool clearAll = false)
    355         {
    356             ToolStripMenuItem tsMenumItemTemp;
    357             for (int i = 0; i < cms.Items.Count; i++)
    358             {
    359                 if (!(cms.Items[i] is ToolStripMenuItem))
    360                 {
    361                     continue;
    362                 }
    363                 tsMenumItemTemp = cms.Items[i] as ToolStripMenuItem;
    364                 if (tsMenumItemTemp.Checked)
    365                 {
    366                     tsMenumItemTemp.Checked = false;
    367                     if (!clearAll)
    368                     {
    369                         break;
    370                     }
    371                 }
    372             }
    373         }
    374         #endregion
    375 
    376         #region 设置ListView的显示项
    377         /// <summary>
    378         /// 根据根节点类型,设置listview显示项
    379         /// </summary>
    380         /// <param name="root">根节点</param>
    381         /// <param name="keywords">搜索关键字</param>
    382         private void AddItemsToListView(string root, string keywords = "")
    383         {
    384             //把当前ListView里的所有选项与所有列名都删除
    385             lvwData.Clear();
    386             lvwData.BeginUpdate();
    387             //根节点是文件
    388             if (File.Exists(root))
    389             {
    390                 AddFileToListView(new FileInfo(root), keywords);
    391             }
    392             //根节点是文件夹
    393             else
    394             {
    395                 DirectoryInfo dir = new DirectoryInfo(root);
    396                 DirectoryInfo[] dirs = dir.GetDirectories();
    397                 FileInfo[] files = dir.GetFiles();
    398                 //把子文件夹信息添加到ListView中显示
    399                 foreach (DirectoryInfo directoryInfo in dirs)
    400                 {
    401                     AddFolderToListView(directoryInfo, keywords);
    402                 }
    403                 //把文件夹下文件信息添加到ListView中显示
    404                 foreach (FileInfo fileInfo in files)
    405                 {
    406                     AddFileToListView(fileInfo, keywords);
    407                 }
    408             }
    409             this.lvwData.EndUpdate();
    410         }
    411 
    412         /// <summary>
    413         /// 将文件添加到ListView中显示
    414         /// </summary>
    415         /// <param name="fileInfo">文件全路径</param>
    416         /// <param name="keywords">搜索关键字</param>
    417         private void AddFileToListView(FileInfo fileInfo, string keywords)
    418         {
    419             ListViewItem lvi = new ListViewItem();//文件项
    420             lvi.Tag = fileInfo.FullName;
    421             lvi.Text = fileInfo.Name;
    422             lvi.ImageIndex = imgLarge.Images.Count - 1;
    423             if (keywords != "" && (!lvi.Text.Contains(keywords)))
    424             {
    425                 return;//搜索不到关键字,不将文件添加到ListView中显示
    426             }
    427             //文件的名称属性项
    428             lvi.SubItems[0].Tag = lvi.Tag;
    429             lvi.SubItems[0].Text = lvi.Text;
    430             //文件大小属性项
    431             ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem();
    432             lvsi.Tag = fileInfo.Length;
    433             lvsi.Text = FormatFolderSize(fileInfo.Length);
    434             lvi.SubItems.Add(lvsi);
    435             //修改日期属性项
    436             lvsi = new ListViewItem.ListViewSubItem();
    437             lvsi.Tag = fileInfo.LastAccessTime.ToString();
    438             lvsi.Text = fileInfo.LastAccessTime.ToString();
    439             lvi.SubItems.Add(lvsi);
    440             //添加文件
    441             this.lvwData.Items.Add(lvi);
    442         }
    443 
    444         /// <summary>
    445         /// 将文件夹添加到ListView中显示
    446         /// </summary>
    447         /// <param name="DirectoryInfo">文件夹</param>
    448         /// <param name="keywords">搜索关键字</param>
    449         private void AddFolderToListView(DirectoryInfo DirectoryInfo, string keywords)
    450         {
    451             ListViewItem lvi = new ListViewItem();
    452             lvi.Tag = DirectoryInfo.FullName;
    453             lvi.Text = DirectoryInfo.Name;//显示名称
    454             lvi.ImageIndex = 0;
    455             if (keywords != "" && (!lvi.Text.Contains(keywords)))
    456             {
    457                 return;//搜索不到关键字,不将文件夹添加到ListView中显示
    458             }
    459             // 文件夹的名称属性项
    460             lvi.SubItems[0].Tag = lvi.Tag;
    461             lvi.SubItems[0].Text = lvi.Text;
    462             //文件夹大小属性项
    463             ListViewItem.ListViewSubItem lvsi = new ListViewItem.ListViewSubItem();
    464             lvsi.Tag = GetFolderSize(DirectoryInfo);
    465             lvsi.Text = FormatFolderSize(folderSize);
    466             folderSize = 0;//清零计算文件夹大小的变量
    467             lvi.SubItems.Add(lvsi);
    468             //修改日期属性项
    469             lvsi = new ListViewItem.ListViewSubItem();
    470             lvsi.Tag = DirectoryInfo.LastAccessTime.ToString();
    471             lvsi.Text = DirectoryInfo.LastAccessTime.ToString();
    472             lvi.SubItems.Add(lvsi);
    473             //添加文件夹
    474             this.lvwData.Items.Add(lvi);
    475         }
    476 
    477         /// <summary>
    478         /// 递归计算文件夹的大小
    479         /// </summary>
    480         /// <param name="DirectoryInfo">文件夹</param>
    481         /// <returns>文件夹大小</returns>
    482         private long GetFolderSize(DirectoryInfo DirectoryInfo)
    483         {
    484             DirectoryInfo[] dirs = DirectoryInfo.GetDirectories();
    485             FileInfo[] files = DirectoryInfo.GetFiles();
    486             //是文件夹时,继续递归
    487             if (dirs.Length > 0)
    488             {
    489                 foreach (DirectoryInfo dir in dirs)
    490                 {
    491                     GetFolderSize(dir);
    492                 }
    493             }
    494             //是文件时,进行累加计算
    495             foreach (FileInfo fi in files)
    496             {
    497                 folderSize = folderSize + fi.Length;
    498             }
    499             return folderSize;
    500         }
    501 
    502         /// <summary>
    503         /// 将文件夹大小转化为直观的文字显示
    504         /// </summary>
    505         /// <param name="size">文件夹大小</param>
    506         /// <returns>文件夹大小的文字表示</returns>
    507         private string FormatFolderSize(long size)
    508         {
    509             if ((size >> 30) > 0)
    510             {
    511                 //保留两位小数
    512                 return ((size >> 20) / 1024.0).ToString("F2") + " GB";
    513             }
    514             else if ((size >> 20) > 0)
    515             {
    516                 //保留两位小数
    517                 return ((size >> 10) / 1024.0).ToString("F2") + " MB";
    518             }
    519             else
    520             {
    521                 return (size >> 10) + " KB";
    522             }
    523         }
    524 
    525         /// <summary>
    526         /// 为listview添加列标题
    527         /// </summary>
    528         private void AddHeaderToListView(ListView listView)
    529         {
    530             ColumnHeader ch = new ColumnHeader();
    531             ch.Text = "文件名";
    532             ch.Width = 150;
    533             listView.Columns.Add(ch);
    534 
    535             ch = new ColumnHeader();
    536             ch.Width = 70;
    537             ch.Text = "大小";
    538             listView.Columns.Add(ch);
    539 
    540             ch = new ColumnHeader();
    541             ch.Text = "修改日期";
    542             ch.Width = 140;
    543             listView.Columns.Add(ch);
    544         }
    545         #endregion
    546 
    547         #region 经常使用的公共方法
    548         /// <summary>
    549         /// 获取文件后缀名(小写)
    550         /// </summary>
    551         /// <param name="path">文件全路径或文件名</param>
    552         public string GetSuffixName(string path)
    553         {
    554             string suffix = string.Empty;
    555             if (path.Contains("."))
    556             {
    557                 suffix = path.Substring(path.LastIndexOf(".") + 1);//后缀名
    558             }
    559             return suffix.ToLower();
    560         }
    561 
    562         /// <summary>
    563         /// 获取应用程序根路径
    564         /// </summary>
    565         public string GetApplicationPath()
    566         {
    567             string path = Application.StartupPath;
    568             string folderName = String.Empty;
    569             while (folderName.ToLower() != "bin")
    570             {
    571                 path = path.Substring(0, path.LastIndexOf("\"));
    572                 folderName = path.Substring(path.LastIndexOf("\") + 1);
    573             }
    574             return path.Substring(0, path.LastIndexOf("\") + 1);
    575         }
    576         #endregion
    577     }
    578 }
    View Code
      1 namespace Controls
      2 {
      3     partial class MainForm
      4     {
      5         /// <summary>
      6         /// 必需的设计器变量。
      7         /// </summary>
      8         private System.ComponentModel.IContainer components = null;
      9 
     10         /// <summary>
     11         /// 清理所有正在使用的资源。
     12         /// </summary>
     13         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
     14         protected override void Dispose(bool disposing)
     15         {
     16             if (disposing && (components != null))
     17             {
     18                 components.Dispose();
     19             }
     20             base.Dispose(disposing);
     21         }
     22 
     23         #region Windows 窗体设计器生成的代码
     24 
     25         /// <summary>
     26         /// 设计器支持所需的方法 - 不要
     27         /// 使用代码编辑器修改此方法的内容。
     28         /// </summary>
     29         private void InitializeComponent()
     30         {
     31             this.components = new System.ComponentModel.Container();
     32             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
     33             this.lvwData = new System.Windows.Forms.ListView();
     34             this.imgLarge = new System.Windows.Forms.ImageList(this.components);
     35             this.imgSmall = new System.Windows.Forms.ImageList(this.components);
     36             this.btnDelete = new System.Windows.Forms.Button();
     37             this.btnFolder = new System.Windows.Forms.Button();
     38             this.btnRename = new System.Windows.Forms.Button();
     39             this.txtPath = new System.Windows.Forms.TextBox();
     40             this.txtSearch = new System.Windows.Forms.TextBox();
     41             this.btnUp = new System.Windows.Forms.Button();
     42             this.btnAdd = new System.Windows.Forms.Button();
     43             this.fbdData = new System.Windows.Forms.FolderBrowserDialog();
     44             this.cmsStyle = new System.Windows.Forms.ContextMenuStrip(this.components);
     45             this.大图标ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
     46             this.详细信息ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
     47             this.平铺ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
     48             this.小图标ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
     49             this.列表ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
     50             this.cmsStyle.SuspendLayout();
     51             this.SuspendLayout();
     52             // 
     53             // lvwData
     54             // 
     55             this.lvwData.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
     56                         | System.Windows.Forms.AnchorStyles.Left)
     57                         | System.Windows.Forms.AnchorStyles.Right)));
     58             this.lvwData.ContextMenuStrip = this.cmsStyle;
     59             this.lvwData.LargeImageList = this.imgLarge;
     60             this.lvwData.Location = new System.Drawing.Point(12, 45);
     61             this.lvwData.Name = "lvwData";
     62             this.lvwData.Size = new System.Drawing.Size(530, 334);
     63             this.lvwData.SmallImageList = this.imgSmall;
     64             this.lvwData.TabIndex = 4;
     65             this.lvwData.UseCompatibleStateImageBehavior = false;
     66             this.lvwData.ItemActivate += new System.EventHandler(this.lvwData_ItemActivate);
     67             // 
     68             // imgLarge
     69             // 
     70             this.imgLarge.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgLarge.ImageStream")));
     71             this.imgLarge.TransparentColor = System.Drawing.Color.Transparent;
     72             this.imgLarge.Images.SetKeyName(0, "folder.png");
     73             this.imgLarge.Images.SetKeyName(1, "file.png");
     74             // 
     75             // imgSmall
     76             // 
     77             this.imgSmall.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgSmall.ImageStream")));
     78             this.imgSmall.TransparentColor = System.Drawing.Color.Transparent;
     79             this.imgSmall.Images.SetKeyName(0, "folder.png");
     80             this.imgSmall.Images.SetKeyName(1, "file.png");
     81             // 
     82             // btnDelete
     83             // 
     84             this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
     85             this.btnDelete.Location = new System.Drawing.Point(466, 393);
     86             this.btnDelete.Name = "btnDelete";
     87             this.btnDelete.Size = new System.Drawing.Size(75, 23);
     88             this.btnDelete.TabIndex = 8;
     89             this.btnDelete.Text = "删除文件";
     90             this.btnDelete.UseVisualStyleBackColor = true;
     91             this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
     92             // 
     93             // btnFolder
     94             // 
     95             this.btnFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
     96             this.btnFolder.Location = new System.Drawing.Point(12, 393);
     97             this.btnFolder.Name = "btnFolder";
     98             this.btnFolder.Size = new System.Drawing.Size(75, 23);
     99             this.btnFolder.TabIndex = 5;
    100             this.btnFolder.Text = "打开文件夹";
    101             this.btnFolder.UseVisualStyleBackColor = true;
    102             this.btnFolder.Click += new System.EventHandler(this.btnFolder_Click);
    103             // 
    104             // btnRename
    105             // 
    106             this.btnRename.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
    107             this.btnRename.Location = new System.Drawing.Point(363, 393);
    108             this.btnRename.Name = "btnRename";
    109             this.btnRename.Size = new System.Drawing.Size(75, 23);
    110             this.btnRename.TabIndex = 7;
    111             this.btnRename.Text = "重命名";
    112             this.btnRename.UseVisualStyleBackColor = true;
    113             this.btnRename.Click += new System.EventHandler(this.btnRename_Click);
    114             // 
    115             // txtPath
    116             // 
    117             this.txtPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
    118                         | System.Windows.Forms.AnchorStyles.Right)));
    119             this.txtPath.Location = new System.Drawing.Point(12, 12);
    120             this.txtPath.Name = "txtPath";
    121             this.txtPath.ReadOnly = true;
    122             this.txtPath.Size = new System.Drawing.Size(332, 21);
    123             this.txtPath.TabIndex = 1;
    124             this.txtPath.TextChanged += new System.EventHandler(this.txtPath_TextChanged);
    125             // 
    126             // txtSearch
    127             // 
    128             this.txtSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
    129             this.txtSearch.Location = new System.Drawing.Point(350, 12);
    130             this.txtSearch.Name = "txtSearch";
    131             this.txtSearch.Size = new System.Drawing.Size(111, 21);
    132             this.txtSearch.TabIndex = 2;
    133             // 
    134             // btnUp
    135             // 
    136             this.btnUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
    137             this.btnUp.Location = new System.Drawing.Point(467, 10);
    138             this.btnUp.Name = "btnUp";
    139             this.btnUp.Size = new System.Drawing.Size(75, 23);
    140             this.btnUp.TabIndex = 3;
    141             this.btnUp.Text = "上级目录";
    142             this.btnUp.UseVisualStyleBackColor = true;
    143             this.btnUp.Click += new System.EventHandler(this.btnUp_Click);
    144             // 
    145             // btnAdd
    146             // 
    147             this.btnAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
    148             this.btnAdd.Location = new System.Drawing.Point(260, 393);
    149             this.btnAdd.Name = "btnAdd";
    150             this.btnAdd.Size = new System.Drawing.Size(75, 23);
    151             this.btnAdd.TabIndex = 6;
    152             this.btnAdd.Text = "新建文件夹";
    153             this.btnAdd.UseVisualStyleBackColor = true;
    154             this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
    155             // 
    156             // cmsStyle
    157             // 
    158             this.cmsStyle.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
    159             this.大图标ToolStripMenuItem,
    160             this.详细信息ToolStripMenuItem,
    161             this.平铺ToolStripMenuItem,
    162             this.小图标ToolStripMenuItem,
    163             this.列表ToolStripMenuItem});
    164             this.cmsStyle.Name = "cmsStyle";
    165             this.cmsStyle.Size = new System.Drawing.Size(125, 114);
    166             // 
    167             // 大图标ToolStripMenuItem
    168             // 
    169             this.大图标ToolStripMenuItem.Checked = true;
    170             this.大图标ToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
    171             this.大图标ToolStripMenuItem.Name = "大图标ToolStripMenuItem";
    172             this.大图标ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
    173             this.大图标ToolStripMenuItem.Text = "大图标";
    174             // 
    175             // 详细信息ToolStripMenuItem
    176             // 
    177             this.详细信息ToolStripMenuItem.Name = "详细信息ToolStripMenuItem";
    178             this.详细信息ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
    179             this.详细信息ToolStripMenuItem.Text = "详细信息";
    180             // 
    181             // 平铺ToolStripMenuItem
    182             // 
    183             this.平铺ToolStripMenuItem.Name = "平铺ToolStripMenuItem";
    184             this.平铺ToolStripMenuItem.Size = new System.Drawing.Size(124, 22);
    185             this.平铺ToolStripMenuItem.Text = "平铺";
    186             // 
    187             // 小图标ToolStripMenuItem
    188             // 
    189             this.小图标ToolStripMenuItem.Name = "小图标ToolStripMenuItem";
    190             this.小图标ToolStripMenuItem.Size = new System.Drawing.Size(124, 22);
    191             this.小图标ToolStripMenuItem.Text = "小图标";
    192             // 
    193             // 列表ToolStripMenuItem
    194             // 
    195             this.列表ToolStripMenuItem.Name = "列表ToolStripMenuItem";
    196             this.列表ToolStripMenuItem.Size = new System.Drawing.Size(124, 22);
    197             this.列表ToolStripMenuItem.Text = "列表";
    198             // 
    199             // MainForm
    200             // 
    201             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
    202             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    203             this.ClientSize = new System.Drawing.Size(554, 432);
    204             this.Controls.Add(this.btnAdd);
    205             this.Controls.Add(this.btnUp);
    206             this.Controls.Add(this.txtSearch);
    207             this.Controls.Add(this.txtPath);
    208             this.Controls.Add(this.btnRename);
    209             this.Controls.Add(this.btnFolder);
    210             this.Controls.Add(this.btnDelete);
    211             this.Controls.Add(this.lvwData);
    212             this.Name = "MainForm";
    213             this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
    214             this.Text = "ListView的使用";
    215             this.Load += new System.EventHandler(this.MainForm_Load);
    216             this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyDown);
    217             this.cmsStyle.ResumeLayout(false);
    218             this.ResumeLayout(false);
    219             this.PerformLayout();
    220 
    221         }
    222         #endregion
    223 
    224         private System.Windows.Forms.ListView lvwData;
    225         private System.Windows.Forms.Button btnDelete;
    226         private System.Windows.Forms.Button btnFolder;
    227         private System.Windows.Forms.Button btnRename;
    228         private System.Windows.Forms.TextBox txtPath;
    229         private System.Windows.Forms.TextBox txtSearch;
    230         private System.Windows.Forms.Button btnUp;
    231         private System.Windows.Forms.Button btnAdd;
    232         private System.Windows.Forms.FolderBrowserDialog fbdData;
    233         private System.Windows.Forms.ImageList imgSmall;
    234         private System.Windows.Forms.ImageList imgLarge;
    235         private System.Windows.Forms.ContextMenuStrip cmsStyle;
    236         private System.Windows.Forms.ToolStripMenuItem 大图标ToolStripMenuItem;
    237         private System.Windows.Forms.ToolStripMenuItem 详细信息ToolStripMenuItem;
    238         private System.Windows.Forms.ToolStripMenuItem 小图标ToolStripMenuItem;
    239         private System.Windows.Forms.ToolStripMenuItem 列表ToolStripMenuItem;
    240         private System.Windows.Forms.ToolStripMenuItem 平铺ToolStripMenuItem;
    241     }
    242 }
    View Code

    2.AddForm.cs及AddForm.Designer.cs

      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Text;
      8 using System.Windows.Forms;
      9 using System.Text.RegularExpressions;
     10 
     11 namespace Controls
     12 {
     13     public partial class AddForm : Form
     14     {
     15         #region 公开字段及属性
     16         /// <summary>
     17         /// 检查输入是否为空
     18         /// </summary>
     19         public bool ButtonFlag = false;
     20 
     21         /// <summary>
     22         /// 文件夹名或文件名
     23         /// </summary>
     24         public string TxtName
     25         {
     26             get { return this.txtName.Text.Trim(); }
     27         }
     28         #endregion
     29 
     30         #region 初期化
     31         /// <summary>
     32         /// 默认构造函数
     33         /// </summary>
     34         public AddForm()
     35         {
     36             InitializeComponent();
     37             //给窗体注册键盘事件
     38             this.KeyPreview = true;
     39         }
     40 
     41         /// <summary>
     42         /// 构造函数,用于新增文件夹
     43         /// </summary>
     44         /// <param name="title">标题</param>
     45         public AddForm(string title)
     46             : this()
     47         {
     48             this.Text = title;
     49         }
     50 
     51         /// <summary>
     52         /// 构造函数,用于更新文件夹
     53         /// </summary>
     54         /// <param name="title">标题</param>
     55         /// <param name="name">内容</param>
     56         public AddForm(string title, string name)
     57             : this(title)
     58         {
     59             this.txtName.Text = name;
     60         }
     61         #endregion
     62 
     63         #region 事件处理
     64         /// <summary>
     65         /// 输入只能是字母、下划线、数字及中文字符
     66         /// </summary>
     67         /// <param name="sender"></param>
     68         /// <param name="e"></param>
     69         private void txtName_KeyPress(object sender, KeyPressEventArgs e)
     70         {
     71             //全选(1)、复制(3)、退格键(8)、粘贴(22)、下划线(95)
     72             int[] chars = { 1, 3, 8, 22, 95 };
     73             // 允许输入字母、下划线、数字、中文字符,允许全选、复制、删除、粘贴
     74             if (Char.IsLetter(e.KeyChar) || Char.IsDigit(e.KeyChar)
     75                 || (e.KeyChar >= 0x4e00 && e.KeyChar <= 0x9fa5) || chars.Contains(e.KeyChar))
     76             {
     77                 e.Handled = false;
     78             }
     79             else
     80             {
     81                 e.Handled = true;
     82             }
     83         }
     84 
     85         /// <summary>
     86         /// 粘贴时过滤不是字母,下划线,数字及中文的字符
     87         /// </summary>
     88         /// <param name="sender"></param>
     89         /// <param name="e"></param>
     90         private void txtName_TextChanged(object sender, EventArgs e)
     91         {
     92             TextBox textBox = sender as TextBox;
     93             //匹配字母,下划线,数字及中文字符的正则表达式
     94             var reg = new Regex("^[A-Z|a-z|_|0-9|u4e00-u9fa5]*$");
     95             var str = textBox.Text.Trim();
     96             var sb = new StringBuilder();
     97             if (!reg.IsMatch(str))
     98             {
     99                 for (int i = 0; i < str.Length; i++)
    100                 {
    101                     if (reg.IsMatch(str[i].ToString()))
    102                     {
    103                         sb.Append(str[i].ToString());
    104                     }
    105                 }
    106                 textBox.Text = sb.ToString();
    107                 //定义输入焦点在最后一个字符
    108                 textBox.SelectionStart = textBox.Text.Length;
    109             }
    110         }
    111 
    112         /// <summary>
    113         /// 提交信息
    114         /// </summary>
    115         /// <param name="sender"></param>
    116         /// <param name="e"></param>
    117         private void btnSave_Click(object sender, EventArgs e)
    118         {
    119             //新增或编辑文件夹名或文件名
    120             if (txtName.Text.Trim() != "")
    121             {
    122                 ButtonFlag = true;
    123                 this.Close();
    124             }
    125             else
    126             {
    127                 MessageBox.Show(this.lblName.Text + "不能为空!", "提示");
    128             }
    129         }
    130 
    131         /// <summary>
    132         /// 给确定按钮添加快捷键
    133         /// </summary>
    134         /// <param name="sender"></param>
    135         /// <param name="e"></param>
    136         private void AddForm_KeyDown(object sender, KeyEventArgs e)
    137         {
    138             if (e.KeyCode == Keys.Enter)
    139             {
    140                 this.btnSave_Click(sender, e);
    141             }
    142         }
    143         #endregion
    144     }
    145 }
    View Code
     1 namespace Controls
     2 {
     3     partial class AddForm
     4     {
     5         /// <summary>
     6         /// Required designer variable.
     7         /// </summary>
     8         private System.ComponentModel.IContainer components = null;
     9 
    10         /// <summary>
    11         /// Clean up any resources being used.
    12         /// </summary>
    13         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    14         protected override void Dispose(bool disposing)
    15         {
    16             if (disposing && (components != null))
    17             {
    18                 components.Dispose();
    19             }
    20             base.Dispose(disposing);
    21         }
    22 
    23         #region Windows Form Designer generated code
    24 
    25         /// <summary>
    26         /// Required method for Designer support - do not modify
    27         /// the contents of this method with the code editor.
    28         /// </summary>
    29         private void InitializeComponent()
    30         {
    31             this.lblName = new System.Windows.Forms.Label();
    32             this.txtName = new System.Windows.Forms.TextBox();
    33             this.btnSave = new System.Windows.Forms.Button();
    34             this.SuspendLayout();
    35             // 
    36             // lblName
    37             // 
    38             this.lblName.AutoSize = true;
    39             this.lblName.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
    40             this.lblName.Location = new System.Drawing.Point(11, 30);
    41             this.lblName.Name = "lblName";
    42             this.lblName.Size = new System.Drawing.Size(59, 13);
    43             this.lblName.TabIndex = 0;
    44             this.lblName.Text = "文件夹名";
    45             // 
    46             // txtName
    47             // 
    48             this.txtName.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
    49             this.txtName.Location = new System.Drawing.Point(78, 26);
    50             this.txtName.Name = "txtName";
    51             this.txtName.Size = new System.Drawing.Size(171, 22);
    52             this.txtName.TabIndex = 1;
    53             this.txtName.TextChanged += new System.EventHandler(this.txtName_TextChanged);
    54             this.txtName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtName_KeyPress);
    55             // 
    56             // btnSave
    57             // 
    58             this.btnSave.Font = new System.Drawing.Font("宋体", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
    59             this.btnSave.Location = new System.Drawing.Point(259, 26);
    60             this.btnSave.Name = "btnSave";
    61             this.btnSave.Size = new System.Drawing.Size(60, 22);
    62             this.btnSave.TabIndex = 2;
    63             this.btnSave.Text = "确定";
    64             this.btnSave.UseVisualStyleBackColor = true;
    65             this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
    66             // 
    67             // AddForm
    68             // 
    69             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
    70             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    71             this.ClientSize = new System.Drawing.Size(334, 72);
    72             this.Controls.Add(this.btnSave);
    73             this.Controls.Add(this.txtName);
    74             this.Controls.Add(this.lblName);
    75             this.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
    76             this.MaximizeBox = false;
    77             this.Name = "AddForm";
    78             this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
    79             this.Text = "新建文件夹";
    80             this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.AddForm_KeyDown);
    81             this.ResumeLayout(false);
    82             this.PerformLayout();
    83 
    84         }
    85 
    86         #endregion
    87 
    88         private System.Windows.Forms.Label lblName;
    89         private System.Windows.Forms.TextBox txtName;
    90         private System.Windows.Forms.Button btnSave;
    91     }
    92 }
    View Code

     3.添加文件夹及图片资源

    1.文件夹Resource目录下包含:文件夹图片(folder.png),文件图片(file.png)两个文件

    2.为ImageList(imgLarge,imgSmall)控件添加Images属性、设置ImageSize属性(imgLarge--40*40, imgSmall--20*20)

    ===相关参考链接===

    1.C#winform中ListView及ContextMenuStrip的使用:http://www.cnblogs.com/makesense/p/4079835.html

    2.C#winform点击ListView列标题进行排序:http://bbs.csdn.net/topics/350071962

    3.C#删除文件和文件夹到回收站:http://www.cnblogs.com/lazycoding/archive/2012/09/25/2702007.html

  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/makesense/p/4113601.html
Copyright © 2011-2022 走看看