using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; namespace WindowsFormsApplication4 { public partial class FileDirectorySelector : Form { protected List SelectedObjects { get; set; } private FileDirectorySelector() { InitializeComponent(); SelectedObjects = new List(); } public static IEnumerable Afficher(IWin32Window owner, string pText) { using (FileDirectorySelector fds = new FileDirectorySelector()) { fds.Text = pText; DialogResult result; if (owner == null) result = fds.ShowDialog(); else result = fds.ShowDialog(owner); if (result == DialogResult.OK) { return fds.SelectedObjects; } } return null; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); var root = treeView1.Nodes.Add(Environment.MachineName); root.Nodes.AddRange((from drive in DriveInfo.GetDrives() where drive.IsReady select new TreeNode(drive.RootDirectory.Name) { Tag = drive.RootDirectory/*, ImageKey = "ImageLecteur"*/}).ToArray()); treeView1.BeforeExpand += new TreeViewCancelEventHandler(treeView1_BeforeExpand); treeView1.AfterCheck += new TreeViewEventHandler(treeView1_AfterCheck); } void treeView1_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Node.Checked) { if (e.Node.Tag != null) SelectedObjects.Add((FileSystemInfo)e.Node.Tag); } else { if (e.Node.Tag != null) SelectedObjects.Remove((FileSystemInfo)e.Node.Tag); } } void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) { DirectoryInfo di; foreach (TreeNode item in e.Node.Nodes) { if (item.Tag is DirectoryInfo) { try { di = (DirectoryInfo)item.Tag; item.Nodes.Clear(); item.Nodes.AddRange((from repertoire in di.EnumerateDirectories() select new TreeNode(repertoire.Name) { Tag = repertoire/*, ImageKey = "ImageRepertoire"*/}).ToArray()); item.Nodes.AddRange((from fichier in di.EnumerateFiles() select new TreeNode(fichier.Name) { Tag = fichier/*, ImageKey = "ImageFichier"*/}).ToArray()); } catch { //Si une exception se produit, on ne traite pas l'erreur } } } } private void button2_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); } private void button1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; this.Close(); } } }