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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM