现在的位置: 首页 > 综合 > 正文

ListView实现XP系统打开文件夹和文件功能

2013年10月12日 ⁄ 综合 ⁄ 共 2932字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.