来源: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;
}
}