Improving the Visual Studio 2010 UI Menu System – Part 3

[ In this series – Part 1, Part 2, Part3, Part 4 ]

UPDATE: 10 April 2011

  • Added Robert Maclean’s VS Extension to synchronise settings
  • Added link to Scott Hanselman’s simplification blog post.

In Parts 1 & 2 we did a lot of asking ‘Why?’ and criticizing (constructively of course) the current state of the Visual Studio 2010 user interface. In Parts 3 & 4 we will switch to asking ‘How?’. Part 3 will specifically cover how we can improve the UI and our productivity with the tools we have on hand today.

1287611215_050 First, let me draw your attention to a hotfix which addresses some of the scrolling issues users are encountering; it addresses positioning of the menu to limit scrolling if possible. Brian Harry covers it all in Hotfixes available for ‘scrolling context menu’ problem. This fix in included in Visual Studio 2010 Service Pack 1.

In preparing to write this I did a bit of searching to see what other people were doing and what Microsoft provides to guide users in this area. I stumbled upon some interesting things, most noticeably the fact that the customization of the menus is actually reduced in 2010. There is a Connect issue logged here: Limited ability to customize VS 2010 Beta 2 IDE and closed as ‘Wont Fix’ for 2010. I found this statement on the Visual Studio blog:

“When we switched over to the WPF shell, we had to re-implement much of the customization UI.  Our priority was to include a customization experience that was accessible to all users (e.g. those who rely on screen readers). Unfortunately, the drag and drop interaction for customization that we has in previous versions of Visual Studio was expensive to re-write, and we weren’t able to include it.  I’ve received a number of comments on this via bug reports through Microsoft Connect, and I want to reassure people that we will be exploring improvements in future releases.” – Suzanne Hansen – Program Manager, Visual Studio Shell Team [note she has now left Microsoft]

I would be surprised if this is addressed in a service pack [it was not addressed in SP1, and don’t expect an SP2] and think that we’ll have to wait for at least Dev11 to see any dropped features brought back into the product. Some of the gaps are being addressed by Extensions though, e.g. CommandingImage

The official guidance from Microsoft is provided in the How to: Customize Menus and Toolbars (Visual Studio) MSDN article, along with some passionate Community Feedback.

Using that guidance I recommend you create a ‘super’ toolbar or a few custom toolbars which cover the commands you use most. This is an extremely tedious task, especially without drag-and-drop support, so it’s not something you are going to want to do more than once. Once you have closed all the other toolbars and have yours configured, click Tools – ‘Import and Export Settings…’, Export selected environment settings, Next. On the ‘Choose Settings to Export’ screen you should clear All Settings and then select ‘Menu and Command Bar Optimisations’ under ‘General Settings’


Image: Export Menu and Command Bar customisations

Click Next, select a location to store the file and then click Finish. You have now saved all your hard work and you can import this file into Visual Studio on other computer you use. Here we only exported the customisations we did, but as you can see, you can export and import all settings to ensure all your computers feel the same.

You can take this a step further by using synchronisation software like Dropbox or Live Mesh to make it even easier. Just go to Tools – Options and select Import and Export Settings and then save them to a folder which you are synching.


Image: Save your settings to a synched folder

Alternatively, if you would like to sync computers on a local network and not use syncing software, then you could save to a network share. You will find guidance here: How to: Share Settings Between Computers or Visual Studio Versions.

Robert Maclean has developed an extension to help synchronise settings. Try it out: Pepper – Visual Studio Settings Backup & Sync

So what about the big scrolling, cluttered context menus? Well you can edit all context menus too, but either I’m missing something or it is an extremely tedious task. You need to click on Tools – Customize, find your context menu and then deal with this monstrosity:


Image: Context menu customisation

I’m wondering whether it will take me more time in my life scrolling and looking for menu items or taking time to customise them the way I want.

Perhaps a minimalist approach would help for now; Scott Hanselman has an interesting blog post: Simplify your Visual Studio 2010 Toolbar and Free Your Mind. This approach may help reduce toolbar clutter, but users are still faced with context menu hell. Again, the onerous is on the developer to improve a less than optimal IDE. Personally, I’m not a fan of hiding everything in this manor as it means having to unhide stuff to use it, though I know many developers who are comfortable with this approach.

I wish this Part could have been more helpful. Perhaps someone can provide some tips, as right now I’m pretty disappointed with the experience we need to go through to fix the experience we find ourselves in. I don’t have Visual Studio 2008 installed on my laptop anymore, but it may be easier to customize the UI in that version then export and import to Visual Studio 2010.

In Part 4 we will bring in a blank canvas and propose some simple and some radical solutions that the next version of Visual Studio can adopt to reduce the complexity of its UI and increase the day to day productivity of developers.


5 Replies to “Improving the Visual Studio 2010 UI Menu System – Part 3”

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s