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

posted @ 2014-11-21 19:19  天琊蓝  阅读(4509)  评论(10编辑  收藏  举报