为 Visual Studio 添加准则






4.69/5 (12投票s)
2006 年 8 月 9 日
4分钟阅读

80079

210
一个简单的工具,目的很简单,就是为 Visual Studio 添加列指南。
引言
今天早上我登录 CodeProject 时,每周投票问了一个问题:“你的源代码有多宽?”。这引发了论坛上的讨论,Vikram 在其中发布了 Sara Ford 这篇文章的链接。
这篇文章详细介绍了一个可以对注册表进行的小修改,以便在 Visual Studio 中显示一个或多个“指南”。(参见上图,了解它在编辑器中的样子。)所以归根结底,这篇文章的最终结果并非我自己的绝妙创意——唯一原创的部分在于创建了一个工具,以最小的努力为你执行注册表修改。
我不会在这里赘述文章的内容,因为你可以从 Sara 的博客上免费阅读。我将只介绍这个工具以及它的制作过程。
工具
这个工具非常简单,以至于几乎没有什么值得评论的。我花了大约 10 分钟就完成了整个制作过程。(更新:加上下面的所有更新,我现在认为这项工作大约花费了五小时。)基本上,它允许你选择一个颜色来设置指南,并输入列地址列表来放置指南。点击“应用”即可完成更改。点击“移除”即可移除更改。这简直是小菜一碟。
更改是通过一些简单的注册表调用来实现的。
private void btnApply_Click(object sender, EventArgs e)
{
if (txtPreview.Text != "" && txtLocations.Text != "")
{
// Create a new key
RegistryKey key =
Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\" +
"VisualStudio\\8.0\\Text Editor", true);
// Set value of sub key
key.SetValue("Guides", txtPreview.Text);
key.Close();
}
}
private void btnRemove_Click(object sender, EventArgs e)
{
RegistryKey delKey =
Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\" +
"VisualStudio\\8.0\\Text Editor", true);
delKey.DeleteValue("Guides");
dekKey.Close();
}
IsNumeric 问题
C# 是一门很棒的语言,但时不时地,你会遇到一些让你难以置信的情况。我想做的一件事就是确保指南位置列表是一个逗号分隔的整数列表。我第一个想到的(因为我骨子里是个 VB 程序员)是简单地 `Split()` 字符串,然后通过询问“IsNumeric()”来检查每个值是否是数字?但令人惊讶的是,C# 没有这样的函数!`Char` 类型有一个类似的函数,但 `String` 没有。
我的第一个尝试(你可能已经下载了这个版本,请参阅下面的更新)是 `Split()` 字符串,然后通过“偷窃” VB 的方式来“借用”这个函数,像这样:
private bool IsNumeric(string value)
{
return Microsoft.VisualBasic.Information.IsNumeric(value);
}
这在大多数情况下都能正常工作,然后我意识到你仍然可以输入一个像 -9 或 9.5 这样的值,它就会通过。虽然这些值可能不会造成任何损害,但它们也无益,所以我提出了一个新计划,也是我一开始就应该采用的计划,即使用正则表达式来验证输入。这不仅减少了我程序中的大量代码,而且最终效果更好。
private bool verifyLocations(string locations)
{
Regex regex = new Regex("^(\\d|,)*\\d*$");
return regex.IsMatch(locations.Replace(" ", ""));
}
更新(2006 年 8 月 14 日)
本文和代码自发布以来已更新。已实现以下功能和更改:
- 现已包含错误检查
- 预览文本框是只读的
- 更改指南位置时,预览文本框现在会正确更新
- 现在,在每次事务处理后都会显式关闭注册表,如下面的评论中所建议的那样
- 包含一个帮助文件
- 设置在会话之间持久化
- 错误检查现在通过 Regex 进行,代码量大大减少,无需 VB 引用
- 程序现在根据下面的评论请求从注册表中读取值
- 在源代码中添加了更多注释
- 现在支持 VS 2003 和 VS 2005
- 帮助内容已大大扩展
- UI 已更改以反映新功能
- 错误处理现在使用 ErrorProvider 模型,并得到更妥善的处理
- 纠正了一些拼写错误
- 减小了源文件的大小
- 添加了制表符停靠
- 现在强制执行指南的最大数量
- 错误修复:加载时,预览颜色现在可以正确显示(从注册表中加载)
- 错误修复:`load()`
- 错误修复:几个必需的空值检查
已知问题
现在的代码相当稳定。唯一已知的“错误”是,目前我没有检查最大列值——你可以输入 20,000 作为列,除非你的显示器环绕整个房间,否则你永远看不到它。这是一个开发工具,我觉得没有必要把它写得太详细。
特别感谢
感谢所有为这个工具提出建议的人,特别是 Gordon Brandly,他提出了 UI 更新方面的建议,并提供了使此工具适用于 VS2003 的代码。另外,感谢那些给我这篇文章投了 5 票的人,我非常感激。
免责声明
这个工具是免费开源的,所以你可以随意使用它。在某个地方给我一些署名会很好,但不是必需的。它确实会修改你的注册表,所以在使用它之前请备份你的注册表!对于由此工具造成的任何系统损坏,我概不负责。