Click here to Skip to main content
15,860,861 members
Articles / Programming Languages / C#
Article

Adding Guidelines to Visual Studio

Rate me:
Please Sign up or sign in to vote.
4.70/5 (13 votes)
14 Aug 20064 min read 73.6K   208   40   26
A simple tool with a simple purpose, to add column guidelines to Visual Studio.

Sample Image - Guidelines.png

Introduction

When I logged on to CodeProject this morning, the weekly poll asked the question, "How wide is your source code?". This led to a discussion in the forums, where Vikram posted a link to this article by Sara Ford:

The article details a little hack that you can make to the registry so that one or more "guidelines" can be dispalyed in Visual Studio. (See the image above for an example of what this looks like in the editor.) So the bottom line is, the end result of this article isn't really due to my own bright idea - the only original part of this is in creating a tool to perform the registry hack for you, with minimal effort on your part.

I won't bother to rehash the content of the article here, as you can read it freely from Sara's blog. I will simply address the tool, and what went into it.

The Tool

The tool is so simple it's almost silly to review it. It took me about 10 minutes to hack together from start to finish. (Update: with all the updates listed below, I'd say there is roughly five hours of work in this now.) Basically, it allows you to select a color to set the guidelines to, and to enter a list of column addresses to place the guidelines at. Click "Apply" and the changes are made. Click "Remove" and the changes are removed. It's a no brainer.

The changes are made through some simple calls to the registry.

C#
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();
    }
}
C#
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();
}

The IsNumeric Problem

C# is a wonderful language, but every now and then, you wander into a situation that leaves you scratching your head in disbelief. One of the things I wanted to do was to make sure that the list of guideline locations was a comma seperated list of integers. My first thought (being an old VB programmer at heart) was to simply Split() the string and check to see if each value was a number by asking "IsNumeric()"? But lo and behold, C# has no such function! The Char type has a similar function, but not String.

My first attempt (and you might have downloaded this copy, see the update below) was to Split() the string, and then "borrow" the function by stealing from VB, like this:

C#
private bool IsNumeric(string value)
{
    return Microsoft.VisualBasic.Information.IsNumeric(value);
}

That worked just fine for the most part, then I realized that you could still enter a value such a -9, or 9.5, and it would pass muster. While those values probably wouldn't hurt anything, they weren't helping it any either, so I came up with a new plan, and the one I should have gone with in the first place, using a regular expression to validate the input. Not only did this minimize a lot of code in my program, but it works better in the end.

C#
private bool verifyLocations(string locations)
{
    Regex regex = new Regex("^(\\d|,)*\\d*$");
    return regex.IsMatch(locations.Replace(" ", ""));
}

Update (Aug 14, 2006)

This article and code has been updated since the initial release. The following features and changes have been implemented:

  • Error checking is now included
  • The preview textbox is readonly
  • The preview textbox now correctly updates when you change the guideline locations
  • The registry is now explicitly closed after each transaction, as reccomended in the comments below
  • A help file is included
  • Settings are persisted between sessions
  • Error checking is now via Regex, much less coding and no VB reference required
  • Program now reads in value from registry as requested in comments below
  • More comments added to the source code
  • Now handles VS 2003 & VS 2005
  • Help greatly expanded
  • UI changed to reflect new features
  • Error handling now uses the ErrorProvider model and is handled more appropriately
  • Some minor spelling errors corrected
  • Reduced the size of the source file
  • Added tab stops
  • Max. # of guidelines is now enforced
  • Bugfix: Preview color now displays correctly when loading from registry
  • Bugfixes: load()
  • Bugfixes: several required null checks 

Known Problems

The code is pretty solid now. The only known "bug" is that I don't currently check for maximum column values - you could enter 20,000 as a column, and unless you have a monitor that wraps around the entire room, you'd never see it. This being a developer tool, I felt it was uneccessary to spell this out.

Special Thanks

To all the people who made suggestions for this tool, especially to Gordon Brandly who suggested some of the UI updates and provided the code to make this work with VS2003. Also, thanks to those of you who put in a 5 vote for this article, I really appreciate it.

Disclaimer

This tool is free and open source, so do what you want with it. Giving me some credit somewhere, for it would be nice, but not required. It does make changes to your registry, so backup your registry before using it! I take no resonsibility for any damage caused to your system by this tool.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Systems Engineer Virtual RadioLogic
United States United States
Todd Davis has been working in web and application development for several years, using Silverlight, ASP.NET, VB.NET, C#, C++ and Javascript, as well as a great deal of work with SQL server and IIS.

He currently works for Virtual Radiologic in Eden Prairie, MN, however he is better known for his varied work in the open source community, especially the DotNetNuke project for which he provided several world-renowned training videos and modules. A huge advocate of open source and open knowledge sharing, everything on his website (www.SeaburyDesign.com) is always offered for free.

Whenever he is not actively coding at his laptop (a rarity to be sure), he can be found woodworking, walking with his wife and kids, or motoring along the back roads of MN on his Harley Davidson Fatboy.

Comments and Discussions

 
GeneralSame dish...different chef Pin
Humble Programmer30-Jan-07 4:54
Humble Programmer30-Jan-07 4:54 
GeneralRe: Same dish...different chef Pin
Todd Davis30-Jan-07 5:09
Todd Davis30-Jan-07 5:09 
QuestionDoes not work with SP1? Pin
slownet5-Jan-07 8:39
slownet5-Jan-07 8:39 
AnswerRe: Does not work with SP1? Pin
slownet5-Jan-07 8:54
slownet5-Jan-07 8:54 
GeneralIsNumeric() Alternative Pin
Adam Byrne22-Aug-06 1:02
Adam Byrne22-Aug-06 1:02 
QuestionBug or feature? Pin
Gordon Brandly11-Aug-06 10:02
Gordon Brandly11-Aug-06 10:02 
AnswerRe: Bug or feature? Pin
Todd Davis11-Aug-06 10:10
Todd Davis11-Aug-06 10:10 
GeneralRe: Bug or feature? Pin
Gordon Brandly11-Aug-06 12:02
Gordon Brandly11-Aug-06 12:02 
GeneralRe: Bug or feature? Pin
Todd Davis14-Aug-06 3:01
Todd Davis14-Aug-06 3:01 
GeneralRe: Bug or feature? Pin
Gordon Brandly14-Aug-06 7:43
Gordon Brandly14-Aug-06 7:43 
GeneralRe: Bug or feature? Pin
Todd Davis14-Aug-06 13:41
Todd Davis14-Aug-06 13:41 
GeneralThank you Pin
Chris Maunder10-Aug-06 0:05
cofounderChris Maunder10-Aug-06 0:05 
GeneralRe: Thank you Pin
Todd Davis10-Aug-06 2:36
Todd Davis10-Aug-06 2:36 
GeneralRead existing registry values [modified] Pin
Olaf Herrmann9-Aug-06 22:01
professionalOlaf Herrmann9-Aug-06 22:01 
GeneralRe: Read existing registry values Pin
Todd Davis10-Aug-06 2:34
Todd Davis10-Aug-06 2:34 
QuestionDotted lines for function body ?? Pin
mrlucmorin9-Aug-06 21:56
mrlucmorin9-Aug-06 21:56 
AnswerRe: Dotted lines for function body ?? Pin
Todd Davis10-Aug-06 2:31
Todd Davis10-Aug-06 2:31 
There are a few unique things in my IDE if you look carefully. I love that function body delimter, and I don't mind giving a free plug here for the product...

Those delimters, and a host of other incredibly productive tools, are from a package called CodeRush (along with Refactor Pro!) made by DevExpress. Here is the direct link:

http://www.devexpress.com/Products/NET/IDETools/CodeRush/[^]

I swear by these tools, and cannot reccomend them enough.

-Todd Davis (toddhd@gmail.com)

GeneralUpdates Pin
Todd Davis9-Aug-06 15:06
Todd Davis9-Aug-06 15:06 
GeneralGreat little program -- works good with VS 2003 too Pin
Gordon Brandly9-Aug-06 11:16
Gordon Brandly9-Aug-06 11:16 
GeneralRe: Great little program -- works good with VS 2003 too Pin
Todd Davis9-Aug-06 11:25
Todd Davis9-Aug-06 11:25 
GeneralRe: Great little program -- works good with VS 2003 too Pin
Gordon Brandly9-Aug-06 11:59
Gordon Brandly9-Aug-06 11:59 
QuestionHow about calling Close on the registry keys... Pin
Nish Nishant9-Aug-06 9:19
sitebuilderNish Nishant9-Aug-06 9:19 
AnswerRe: How about calling Close on the registry keys... Pin
Todd Davis9-Aug-06 9:32
Todd Davis9-Aug-06 9:32 
GeneralRe: How about calling Close on the registry keys... Pin
Jamie Nordmeyer9-Aug-06 10:32
Jamie Nordmeyer9-Aug-06 10:32 
GeneralRe: How about calling Close on the registry keys... Pin
Todd Davis9-Aug-06 15:22
Todd Davis9-Aug-06 15:22 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.