来源:C#入门经典第四版
实现效果:
后台代码:
public partial class ListViewExam : Form { private System.Collections.Specialized.StringCollection folderCol; private void CreateHeadersAndFillListView() { ColumnHeader colHead; colHead = new ColumnHeader(); colHead.Text = "Filename"; lvFiles.Columns.Add(colHead); colHead = new ColumnHeader(); colHead.Text = "Size"; lvFiles.Columns.Add(colHead); colHead = new ColumnHeader(); colHead.Text = "Lastaccessed"; lvFiles.Columns.Add(colHead); } private void PaintListView(string root) { try { if(root.CompareTo("")==0) return; DirectoryInfo dir=new DirectoryInfo(root); DirectoryInfo[] dirs=dir.GetDirectories(); FileInfo[] files=dir.GetFiles(); lvFiles.Items.Clear(); lbCurrentPath.Text=root; ListViewItem lvi; ListViewItem.ListViewSubItem lvsi; lvFiles.BeginUpdate(); foreach(DirectoryInfo di in dirs) { lvi=new ListViewItem(); lvi.Text=di.Name;//Filename lvi.ImageIndex=0; lvi.Tag=di.FullName; lvsi=new ListViewItem.ListViewSubItem(); lvsi.Text="";//Size lvi.SubItems.Add(lvsi); lvsi=new ListViewItem.ListViewSubItem(); lvsi.Text=di.LastAccessTime.ToString();//Lastaccessed lvi.SubItems.Add(lvsi); lvFiles.Items.Add(lvi); } foreach(FileInfo file in files) { lvi=new ListViewItem(); lvi.Text=file.Name; lvi.ImageIndex=1; lvi.Tag=file.FullName; lvsi=new ListViewItem.ListViewSubItem(); lvsi.Text=file.Length.ToString(); lvi.SubItems.Add(lvsi); lvsi=new ListViewItem.ListViewSubItem(); lvsi.Text=file.LastAccessTime.ToString(); lvi.SubItems.Add(lvsi); lvFiles.Items.Add(lvi); } lvFiles.EndUpdate(); } catch(Exception ex) { MessageBox.Show("Error:" + ex.Message); } } public ListViewExam() { InitializeComponent(); //记录访问过的路径,便于后退按钮使用 folderCol = new System.Collections.Specialized.StringCollection(); //初始化ListView的标题 CreateHeadersAndFillListView(); PaintListView(@"C:\"); folderCol.Add(@"C:\"); btnBack.Enabled=false; } private void rbtnTile_CheckedChanged(object sender, EventArgs e) { if ((sender as RadioButton).Checked) lvFiles.View = View.Tile; } private void rbtnDetails_CheckedChanged(object sender, EventArgs e) { if ((sender as RadioButton).Checked) lvFiles.View = View.Details; } private void rbtnList_CheckedChanged(object sender, EventArgs e) { if ((sender as RadioButton).Checked) lvFiles.View = View.List; } private void rbtnSmall_CheckedChanged(object sender, EventArgs e) { if ((sender as RadioButton).Checked) lvFiles.View = View.SmallIcon; } private void rbtnLarge_CheckedChanged(object sender, EventArgs e) { if ((sender as RadioButton).Checked) lvFiles.View = View.LargeIcon; } private void lvFiles_ItemActivate(object sender, EventArgs e) { ListView lv = sender as ListView; string filename = lv.SelectedItems[0].Tag.ToString(); //如果当前访问的是文件,则直接打开文件 if (lv.SelectedItems[0].ImageIndex != 0) { try { System.Diagnostics.Process.Start(filename); } catch { return; } } else //如访问的是文件夹,则在打开文件夹,在ListView里显示 { PaintListView(filename); folderCol.Add(filename); } if (folderCol.Count > 1) btnBack.Enabled = true; } private void btnBack_Click(object sender, EventArgs e) { if (folderCol.Count > 1) { PaintListView(folderCol[folderCol.Count - 2]); folderCol.RemoveAt(folderCol.Count - 1); } else { PaintListView(folderCol[0]); } if (folderCol.Count == 1) btnBack.Enabled = false; } }