【发布时间】:2016-06-15 06:27:33
【问题描述】:
我在 Windows 中做了很多修改,所以我经常访问这个和那个文件夹。手动执行此操作很痛苦。这就是为什么我想创建一个包含一些环境变量的小工具。
我有一个 TreeView。我选择一个节点,工具会打开相应的文件夹。
public static class EnvPaths {
public static string HomeDrive = Environment.GetEnvironmentVariable("HomeDrive");
public static string ProgramFiles = Environment.GetEnvironmentVariable("ProgramFiles");
public static string CommonFiles = Environment.GetEnvironmentVariable("CommonProgramFiles");
public static string ProgramFilesX86 = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
public static string CommonFilesX86 = Environment.GetEnvironmentVariable("CommonProgramFiles(x86)");
public static string ProgramData = Environment.GetEnvironmentVariable("ProgramData");
public static string User = Environment.GetEnvironmentVariable("HomePath");
public static string AppData = Environment.GetEnvironmentVariable("AppData");
public static string QuickLaunch = AppData + @"\Microsoft\Internet Explorer\Quick Launch";
public static string Temp = Environment.GetEnvironmentVariable("Temp");
public static string Windows = Environment.GetEnvironmentVariable("WinDir");
public static string System32 = Windows + @"\system32";
public static string etc = System32 + @"\drivers\etc";
}
private void WinFoldersTreeView_AfterSelect(object sender, TreeViewEventArgs e)
{
if (WinFoldersTreeView.SelectedNode != null)
{
var selectedFolder = WinFoldersTreeView.SelectedNode.Text;
switch (selectedFolder)
{
case "Home Drive":
Process.Start(EnvPaths.HomeDrive);
break;
case "Program Files":
Process.Start(EnvPaths.ProgramFiles);
break;
case "Common Files":
Process.Start(EnvPaths.CommonFiles);
break;
case "Program Files (x86)":
Process.Start(EnvPaths.ProgramFilesX86);
break;
case "Common Files (x86)":
Process.Start(EnvPaths.CommonFilesX86);
break;
case "ProgramData":
Process.Start(EnvPaths.ProgramData);
break;
case "User":
Process.Start(EnvPaths.User);
break;
case "AppData":
Process.Start(EnvPaths.AppData);
break;
case "Quick Launch":
Process.Start(EnvPaths.QuickLaunch);
break;
case "Temp":
Process.Start(EnvPaths.Temp);
break;
case "Windows":
Process.Start(EnvPaths.Windows);
break;
case "System32":
Process.Start(EnvPaths.System32);
break;
case "etc":
Process.Start(EnvPaths.etc);
break;
}
}
}
我有一个问题。打开文件夹后,我想取消选择选定的节点。所以如果我打开一个文件夹,关闭它,然后想再次打开它,我不能。我无法再次选择所选节点。我需要选择另一个节点,然后再次选择原始节点。这将打开两个文件夹,而不是一个。
我使用WinFoldersTreeView.SelectedNode = null 取消选择节点。这可行,但会导致另一个问题。由于 TreeView 附加了其AfterSelect 事件,将WinFoldersTreeView.SelectedNode 设置为null 将再次触发AfterSelect 事件。我最终打开了两个文件夹。
- 我选择“程序文件”
-
Process.Start(EnvPaths.ProgramFiles);打开文件夹。 -
WinFoldersTreeView.SelectedNode = null;取消选中节点并再次触发AfterSelect事件。这还将第一个节点(“Home Drive”)设置为选定节点。 - 我关闭“Program Files”文件夹(第二个
AfterSelect事件正在进行中),“Home Drive”(C:) 文件夹打开。
如何在不触发AfterSelect事件的情况下取消选中节点?
【问题讨论】: