Welcome to Null City Software
Tasty, tasty software.
Null City Logo Home Kitae Breeze Products Login Forums Contact Us About Us
Visual Studio is a huge sprawling mature application which has been around for a staggering 12 years. I use Visual Studio both at work and for my own projects, and I've been using it now for a good 8 of those 12 years. So I thought I'd pass on a few gems I've picked up along the way. See how many of these you already know.

In no real particular order.

10) Visual Studio 2002 had a Clipboard Ring dockable window that held a buffer of everything you copied in Visual Studio this allowed you to both view and rewind text you had copied in the editor. As far as I'm aware, the dockable Clipboard Ring window was removed. However, you still have access to this through a menu and shortcut key combination. In the editor, keep tapping CTRL+SHIFT+V to cycle through the clipboard ring.

9) Problem: You know the name of a file in your solution but you cant remember where it is? One Solution: using the find box on the Standard toolbar, type ">of [filename]" and as you type, Visual Studio will offer you a drop down of files in the solution that match what you are typing. Simply press up/down and enter to select the file you want to open.

8) It's quite easy to miss these buttons (sometimes mapped to Mouse Button 4 and 5 if you have them):

These are totally invaluable to me. Visual Studio keeps track of every document you move between and the location of the caret. These buttons allow you to move backwards and forwards through that history which is incredibly helpful in large projects.

7) Document Outline Window. This baby has been around for a while now, but is very easy to miss. If you do a lot of WinForms development this window should be on display at all times if you can squeeze it in because it makes renaming controls incredibly easy and allows you to view the hierarchy of your controls. This window can be reached through the View > Other Windows > Document Outline menu by default, or by pressing CTRL+ALT+T. If like me, you tend to build a whole user interface and then worry about renaming the controls after you've built it, then this window is for you. Build your UI as normal, then start from the top of the Document Outline window and work your way down to the bottom hitting F2 to rename your controls as you go.

6) Quick Watch - Probably the best place to test inline code while debugging. The QuickWatch window, which I generally remap the keyboard shortcut for to F9, will evaluate pretty much any code you type into it at run-time. When debugging, break into your code, select a chunk of code in the editor and Right Click > Quick Watch to display the Quick Watch window. Here you can tweak the expression and view its results.

5) Using the Toolbox as a snippet container. There will always be times whilst programming when you need to have more than one chunk of text in the clipboard. Visual Studio makes managing this situation very easy, simply create a new tab on the Toolbox by Right clicking in the empty space and selecting "Add Tab", give it a name and hit enter. Now simply drag and  drop code from any editor directly into the new tab. Nice huh? Additionally, once you've dropped code into the new tab you  can right click the item and rename it to something more useful if it's code you use frequently.

4) Some time ago, Microsoft added the "Tab Order" button to the WinForms designer, but it may have gone unnoticed by some.  Tab Ordering is very important for those of us who like to use the keyboard wherever possible, and is very good UI  practice to set up correctly. Whilst doing so is a complete pain in the ass, it is somewhat easier to manage with the "Tab  Order" item on the Edit Menu. When you have finished setting up a user interface in the WinForms designer, simply select  Edit > Tab Order and you will get an overlay on top of your user interface. Click each of your controls in the order you want them to activate when the TAB key is pressed by the end user. When done, select the Edit > Tab Order menu item again. The most annoying thing is, you still have to do it every time you insert a new control in the middle of your form, but hey, it's easier than doing it manually.

3) Modify those keyboard shortcuts to suit your own needs! Everyone knows where it is, Tools > Options > Environment > Keyboard, but very few people actually bother tailoring them to their own needs. This is a bit of a shame, because keyboard shortcuts set up properly can seriously speed up develepment and save on many hundreds to thousands of mouse clicks. No really, it pays dividends over time, and with the ability to export and save all your settings in seconds with the Import and Export wizard you only ever have to do it once, even across installations. Here are some of my favourites that I always remap:

ALT+Q - Insert Snippet
A hang over I have from QuickCode.NET). It's just easier.

ALT+S - View.ShowSmartTag
This is invaluable, you know that little smart tag that appears over your code when you don't have a namespace imported? View.ShowSmartTag opens that dropdown if you have the cursor over it, thus, ALT+S - Enter will import the namespace automatically for you.

CTRL+S - File.SaveAll
I remap the control + S shortcut to SaveAll because I instinctively jump around my code hitting CTRL+S to save, this way, everything gets saved at once and I've not lost any code since.

I've got loads of others that I remap but if you haven't already, spend some time in the options, there's stuff in there that could save you hours of work in the long run.

2) This one is a real life saver if you are developing an application with multiple entry points, such as client-server architectures. But if you just dont know it's there then you aren't using it. Number 2 is: launching multiple programs  with debug at the same time. I used many different ways around this before I realised it was there. I'm not sure whether the feature was added fairly recently (2005 maybe?), or whether it's just always been there and I never used it. Anyway I've been using it now for years in one place or another. If you have a project of any real size, you are almost certainly running more than one assembly. For those who don't know, Right Click your Solution root node and select "Set Startup Projects..."

In the following dialog simply pick "Multiple startup projects" and set the action to "Start" for all the applications you want to run with debugging.

1) Prematurely ending a build if a project in the solution failed. If you have a full release of Visual Studio (i.e. not Express or Game Studio) you have access to the Macros editor on the Tools menu. From here, in the default EnvironmentEvents VB module add the following code, save, and exit the macros editor.

    Private Sub BuildEvents_OnBuildProjConfigDone(ByVal Project As String, ByVal ProjectConfig As String, ByVal Platform As String, ByVal SolutionConfig As String, ByVal Success As Boolean) Handles BuildEvents.OnBuildProjConfigDone
        If Not Success Then
        End If
    End Sub

The code above will kill the build if a project fails. Meaning you don't have to wait for the rest of the projects to fail before you can dig in and fix the problem. Useful!

Hopefully these little tips will help a few of you out there get a just a little bit more out of what is an absolutely fantastic editing package. Please drop me a comment if you find any of this useful, as I'd like to know whether to write more on related topics.
Rob - Null City Admin
Finally got round to cleaning up the Coefficient Sapphire library. The Sapphire library is the first of many libraries that I'm going to be releasing over the coming months. This library at its core is a simple string replacement utility. However it's power comes from the fact that it can generate random strings and attributes using Static Lists and Markov Chains, making it very good and producing random items for RPG games or random character names.

Coefficient Sapphire is a lightweight .NET 3.5 library released under the Creative Commons - Attribution Licence. Here's a few screenshots of the library used in an old game I wrote:


To try out the Coefficient Library you can either check it out at the Products section here: Coefficent.Sapphire.
Rob - Null City Admin
After a bit of playing around I've just finished adding the ability to comment on posts on the site. On every post where comments are appropriate, anyone can now leave comments about the article or product. You can also drop me a line here with the new Contact Us form.

Additionally I've uploaded a few bits of software I've written recently:

1) EVE Online Window Border Remover
- An application to cleanly remove the thick border from the outside of the EVE Online window at startup.

2) Minesweeper.NET
- A sample .NET 3.5 application demonstrating how to write the classic game Minesweeper.

I've also given the final version of Protean IDE a new home:

3) Protean IDE V1.4

The proteanide.co.uk domain now links directly to this page. And the page contains the final version and full source code to both Protean IDE and the Compona SyntaxBox.

Finally, I've added stubs to some of the stuff that'll be coming to the site soon. You can check that lot out in the Products section.
Rob - Null City Admin
By RobHutchinson on 03rd May 2009 @ 11:11PM
:: General Product Discussion Forum

This is a remake of the standard Minesweeper application which comes with Microsoft Windows. It is provided mostly for people to learn. Creating minesweeper is quite an interesting learning project as it requires a flood fill algorithm. I originally wrote this as a university project but the source code and executable are provided here for you.

- Entirely Managed - Rendered with GDI+ (yeah, it's a bit slow).
- Allows boards larger than the default windows minesweeper application (up to 100x100 max). Obviously, you can modify the source to allow grids as big as you like.
- Provides high score boards and saves to a data file.
- Works cross platform under Mono.


File: Minesweeper.NET.zip (40.41 KB) - Version: 1.0
Icon Image Last Updated: Sunday, 15 May 2011 11:49:31
MD5: A65BBA5C1AF3EF35EAF33E27CB525
SHA1: A116518284F912CE799D0F3781CEBEC30F3769F

File: Minesweeper.NET Source.zip (65.93 KB) - Version: 1.0
Icon Image Last Updated: Sunday, 15 May 2011 11:50:11
MD5: 174BDAB9384AEA11A9BA88E139899CB2
SHA1: A22650FBCACA5A4B7FF2E5858797D65F3601C62

By RobHutchinson on 03rd May 2009 @ 10:41PM
Coefficient.Onyx is a library full of useful little Windows Forms controls.

Download available soon
By RobHutchinson on 03rd May 2009 @ 10:38PM
Coefficient.Plateau is a Windows Forms application development platform which can be used to build applications rapidly. It provides all the building blocks to create applications quickly and efficiently.

Download available soon
By RobHutchinson on 03rd May 2009 @ 10:35PM
Coefficient.Amber is a socket simplification library for Microsoft .NET 3.5 which allows you to set up very low bandwidth Client <> Server architectures with ease.

Download available soon
By RobHutchinson on 03rd May 2009 @ 10:32PM
Coefficient.Jade is a general utility library for Microsoft .NET 3.5. Jade adds some nice features and components to the .NET Framework which aid rapid application development.

Download available soon
By RobHutchinson on 03rd May 2009 @ 10:20PM
Coefficient.Sapphire is a Microsoft .NET 3.5 generator library supporting a variety of text generation methods. It supports text generated through a tree of mechanisms to produce a semi-random generated output.

This library is useful for generating all kinds of random text, an example of this might be the name of a character, or a random sentence through the use of a Markov Chain, or the name and properties of a random loot item in a game. Coefficient.Sapphire can attribute property modifiers to words in order to produce not only the name of items/npcs in a game, but also their stats.

Here is the library used in a game I wrote a while back to generate the Name, Level and Attributes of all items at random:

Each of the words hold meaning. For example the word "slow" may adjust agility -2 points and likewise "turtle" may increase armour +3. Flags can also be gleaned from the attributes returned by generation. So for example, the word "dagger" can flag "type" = "dagger" which can then be used to give the item an icon and imbue the item with the properties of a dagger type weapon. In a game with loot or random NPCs this kind of generator could add lastability to the game and reduce the amount of work required building a database of entities for the user to interact with. In the same application, the library was also used to produce random names for characters. Here are some of the names it will generate with a decent set of sub-data:


Everything within the system can be generated directly from a generator XML file or with the library objects programmatically.


File: Coefficient.Sapphire.zip (101.47 KB) - Version: 1.0
Icon Image Last Updated: Sunday, 15 May 2011 08:37:35
MD5: 9825F7E33EDA981DDCD56A8A7B96A8C5
SHA1: 92B87ECA3B8F29788959BDEE596C08420AF4E9F
By RobHutchinson on 03rd May 2009 @ 03:34PM
Welcome to the Products section of the Null City site.

Use the list of items on the right to browse all the applications and products in this section.

Most of the applications you see here are still in active development and any bugs found will be fixed wherever possible. If you've found any of the applications useful or have found a bug you can report these on the forums. A forum link will be provided on the individual product download page. If there is a bug tracker available for an application, this will also be linked on the download page where applicable.
By RobHutchinson on 03rd May 2009 @ 12:56PM
This application is designed to sit between you and the EVE executable which runs EVE Online. You can use EVE Window Border Remover to eliminate the thick window frame around the outside of the EVE window when it is running in Windowed Mode. This ensures EVE runs in a 'fake' full screen mode, which does not cause a display switch operation when you ALT+TAB and allows EVE to play nicely with multiple monitors.

EVE Online Window Border Remover waits for the application to launch and then removes the thick border frame (chrome) from the outside of the window. When EVE is running in windowed mode, the application automatically resizes the window to fit the bounds of the monitor you have picked from the application.


First install the Microsoft .NET Framework Version 3.5. If you keep your machine up to date automatically with Windows Updates, you may not need to install this update. However if the application fails, try installing .NET 3.5.

Simply download the archive below and extract the executable directly to the folder where EVE is installed. Then replace your shortcuts to EVE with shortcuts to the border remover. Run the border remover and follow the help provided.

The border remover has settings based on it's location. So either re-naming the executable or moving it to another directory will give it separate settings. This allows you to use the border remover on multiple copies of EVE if you multibox EVE.

By RobHutchinson on 03rd May 2009 @ 03:15AM
By RobHutchinson on 03rd May 2009 @ 03:15AM

After 4 or so years, finally I'm back on the inter-web writing software! For some time now I've been creating all kinds of little applications, tools and libraries that I've found useful (me-ware as it were). But I'm pretty sure some of this stuff would be useful to other people not just me. I've basically decided to plonk it all on here, so that other people can hopefully benefit from my work. I'm a senior software developer who's worked on loads of successful projects in the past including Protean IDE - an application that I developed over a 3 year period which was enjoyed by many.

This site is the product of about a week's work on and off. I've always wanted to have a desktop-maintainable blogging engine with product support built in as well as all the usual blogging tools such as tags and archives. That's pretty much what this site has become. Here's a screenshot of the site-editing application at work:

{old image removed}

In the near future I'm going to be writing a very simple forum application for the site and provide members a way to sign up and log in. On top of that, I'm also going to build a simple bug tracking system so that users of the software have somewhere to post issues they're having with any software on the site.

Anyway have a browse around, you'll see a slow trickle of software and various rants appearing on the site over the next few months. I've got a huge backlog of software I need to polish up in my spare time and put up here for others to use.
Rob - Null City Admin
By RobHutchinson on 03rd May 2009 @ 03:10AM
Null City Software was set up as a place to provide free and licenced software.

At the moment Null City consists of a single developer - me (Rob Hutchinson), writing software in my spare time. I've been writing software now for over 16 years. I've written some interesting software in that time, most of which no one has ever really seen other than Protean IDE. Which at it's high point had about 400 registered users.

With Null City the goal is basically to create a place on the web to put the good bits of software I write, so that others can use and share the software.

At the moment, everything here is written in Microsoft .NET 4. So if you want to use any of it, you're going to have to install that. However if you keep on top of your Windows Updates then there's a pretty good chance you already have it.

Anyway, enjoy the software and the rants.
If you find any of it useful, let us know by contacting us here.
Rob - Null City Admin
Null City Software
Null City is dedicated to developing top quality sofware products for Windows PC, XBox and Windows Phone. We specialise in games and .NET applications & components.