public partial class Form1 : Form { private string m_path; private bool m_recursion; private TreeNode m_rootNode; public Form1() { InitializeComponent(); m_rootNode = treeView1.Nodes.Add("//"); AddDirs("//", m_rootNode); treeView1.SelectedNode = m_rootNode; m_rootNode.Expand(); m_recursion = false; } /// <summary> /// 当前选择的文件路径 /// </summary> public string SelectDirectory { get { return m_path; } } private void btnCancel_Click(object sender, EventArgs e) { //this.DialogResult = DialogResult.Cancel; } private void AddDirs(string dirs, TreeNode tn) { try { string[] directorys = Directory.GetDirectories(dirs); Array.Sort(directorys); treeView1.BeginUpdate(); foreach (string dir in directorys) { TreeNode node = tn.Nodes.Add(dir.Substring(dir.LastIndexOf("//") + 1)); if (!m_recursion) { m_recursion = true; AddDirs(dir, node); node.Tag = true; m_recursion = false; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { treeView1.EndUpdate(); } } private void btnOK_Click(object sender, EventArgs e) { MessageBox.Show(SelectDirectory); //this.DialogResult = DialogResult.OK; } private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) { for (int i = 0; i < e.Node.Nodes.Count; i++) { if (e.Node.Nodes[i].Tag != null) { if ((bool)e.Node.Nodes[i].Tag == true) return; } else { if (e.Node.Nodes[i].GetNodeCount(false) == 0) AddDirs(e.Node.Nodes[i].FullPath.Substring(1), e.Node.Nodes[i]); else return; } } } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { m_path = e.Node.FullPath.Substring(1); } }