65.9K
CodeProject 正在变化。 阅读更多。
Home

为 Visual Studio 添加准则

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (12投票s)

2006 年 8 月 9 日

4分钟阅读

viewsIcon

80079

downloadIcon

210

一个简单的工具,目的很简单,就是为 Visual Studio 添加列指南。

Sample Image - Guidelines.png

引言

今天早上我登录 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 票的人,我非常感激。

免责声明

这个工具是免费开源的,所以你可以随意使用它。在某个地方给我一些署名会很好,但不是必需的。它确实会修改你的注册表,所以在使用它之前请备份你的注册表!对于由此工具造成的任何系统损坏,我概不负责。

© . All rights reserved.