Windows Explorer-Like Program: extends ListView
using System; using System.Diagnostics; // For Process.Start using System.Drawing; using System.IO; using System.Windows.Forms; class FileListView : ListView { string strDirectory; public FileListView() { View = View.Details; ImageList imglst = new ImageList(); imglst.Images.Add(new Bitmap(GetType(), "DOC.BMP")); imglst.Images.Add(new Bitmap(GetType(), "EXE.BMP")); SmallImageList = imglst; LargeImageList = imglst; Columns.Add("Name", 100, HorizontalAlignment.Left); Columns.Add("Size", 100, HorizontalAlignment.Right); Columns.Add("Modified", 100, HorizontalAlignment.Left); Columns.Add("Attribute", 100, HorizontalAlignment.Left); } public void ShowFiles(string strDirectory) { this.strDirectory = strDirectory; Items.Clear(); DirectoryInfo dirinfo = new DirectoryInfo(strDirectory); FileInfo[] afileinfo; try { afileinfo = dirinfo.GetFiles(); } catch { return; } foreach (FileInfo fi in afileinfo) { ListViewItem lvi = new ListViewItem(fi.Name); if (Path.GetExtension(fi.Name).ToUpper() == ".EXE") lvi.ImageIndex = 1; else lvi.ImageIndex = 0; lvi.SubItems.Add(fi.Length.ToString("N0")); lvi.SubItems.Add(fi.LastWriteTime.ToString()); string strAttr = ""; if ((fi.Attributes & FileAttributes.Archive) != 0) strAttr += "A"; if ((fi.Attributes & FileAttributes.Hidden) != 0) strAttr += "H"; if ((fi.Attributes & FileAttributes.ReadOnly) != 0) strAttr += "R"; if ((fi.Attributes & FileAttributes.System) != 0) strAttr += "S"; lvi.SubItems.Add(strAttr); Items.Add(lvi); } } protected override void OnItemActivate(EventArgs ea) { base.OnItemActivate(ea); foreach (ListViewItem lvi in SelectedItems) { try { Process.Start(Path.Combine(strDirectory, lvi.Text)); } catch { continue; } } } } class ExplorerLike : Form { FileListView filelist; MenuItemView mivChecked; public static void Main() { Application.Run(new ExplorerLike()); } public ExplorerLike() { BackColor = SystemColors.Window; ForeColor = SystemColors.WindowText; filelist = new FileListView(); filelist.Parent = this; filelist.Dock = DockStyle.Fill; Splitter split = new Splitter(); split.Parent = this; split.Dock = DockStyle.Left; split.BackColor = SystemColors.Control; Menu = new MainMenu(); Menu.MenuItems.Add("&View"); string[] astrView = { "Lar&ge Icons", "S&mall Icons", "&List", "&Details" }; View[] aview = { View.LargeIcon, View.SmallIcon, View.List, View.Details }; EventHandler eh = new EventHandler(MenuOnView); for (int i = 0; i < 4; i++) { MenuItemView miv = new MenuItemView(); miv.Text = astrView[i]; miv.View = aview[i]; miv.RadioCheck = true; miv.Click += eh; if (i == 3) // Default == View.Details { mivChecked = miv; mivChecked.Checked = true; filelist.View = mivChecked.View; } Menu.MenuItems[0].MenuItems.Add(miv); } Menu.MenuItems[0].MenuItems.Add("-"); MenuItem mi = new MenuItem("&Refresh", new EventHandler(MenuOnRefresh), Shortcut.F5); Menu.MenuItems[0].MenuItems.Add(mi); } void DirectoryTreeViewOnAfterSelect(object obj, TreeViewEventArgs tvea) { filelist.ShowFiles(tvea.Node.FullPath); } void MenuOnView(object obj, EventArgs ea) { mivChecked.Checked = false; mivChecked = (MenuItemView)obj; mivChecked.Checked = true; filelist.View = mivChecked.View; } void MenuOnRefresh(object obj, EventArgs ea) { } } class MenuItemView : MenuItem { public View View; }