• 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

  • 相关阅读:
    我不想安于当前的限度,以达到所谓的幸福,回顾下2020年的我
    CentOS 7 搭建 TinyProxy 代理 &&python 脚本访问
    使用国内源来安装pytorch速度很快
    opencv-python的格式转换 RGB与BGR互转
    自签SSL证书以及https的双向认证 实现nginx双向代理
    springboot使用 @EnableScheduling、@Scheduled开启定时任务
    微信下载对账单
    SpringBoot 中定时执行注解(@Scheduled、@EnableScheduling)
    使用idea合并 dev分支合并到test分支
    .Net Core + Entity Framework 调用Oracle 存储过程
  • 原文地址:https://www.cnblogs.com/makesense/p/4113601.html
Copyright © 2020-2023  润新知