Archives / 2006
  • How to Delete an WinForms Control Event Handler Quickly

    Recently a long-time user of Visual Studio looked over my shoulder when I deleted an event handler from my source code, and he said “uh, wait… how did you do that?”. If you are like him, not using the keyboard for this task, and would like to speed up things a bit, you may find this tip useful.

    Imagine you have an event handler in a file MyForm.cs, e.g.

    private void myButton_Click( object sender, EventArgs e )
       // ... some code ...

    Deleting only this method obviously results in a compiler error as there’s a line

    this.myButton.Click += new System.EventHandler( this.myButton_Click );

    in the file MyForm.Designer.cs that has to be deleted as well.

    To delete the event handler properly in Visual Studio 2005, using only the keyboard, perform the following steps:

    • In the MyForm.cs file, move the cursor on the name of the method file (i.e. myButton_Click) and press Shift-F12 (command Edit.FindAllReferences), which will bring you to the Find Symbols Results window.
    • press the Cursor Down key to move to the second line showing the occurrence of myButton_Click in the designer-generated code that connects the event with the handler method*
    • press Enter to jump to the MyForm.Designer.cs file
    • delete the current line by pressing Ctrl-Shift-L (command Edit.LineDelete)
    • jump back to the MyForm.cs by pressing Ctrl-Tab
    • and finally delete the code of the event handler method.

    The description of the steps may sound a bit complicated at first, but you’ll find that the actual keystrokes come naturally pretty soon.

    *) Note that this is only the case when the form was actually created in Visual Studio 2005 – keep your eyes open when working with forms in older projects that were started in Visual Studio .NET 200x.

  • Thank You!

    There’s a time for complaining about issues, and there’s a time for telling when things are great.

    I’m right in the middle of writing custom column and cell types for a DataGridView and I had a problem with adding a custom column to an existing grid – the DataGridView threw an exception in design mode, obviously a bug in my new code.

    It took me only a couple of minutes to

    • start a second instance of Visual Studio for debugging*
    • open the current solution a second time
    • open the designer for the dialog the DataGridView was on
    • add the custom column
    • watch the first Visual Studio instance point me to the source code location where the resulting exception was thrown
    • edit the code (after letting Visual Studio unwind the exception)
    • and continue with a now working custom column.

    Some of you out there may shrug their shoulders and ask “so what?”, but I must admit that even though I have used edit and continue for code running in Visual Studio before (when developing managed add-ins), I never cease to be freaking amazed! So to whoever contributed his/her part to making this work: Thank You!

    *) Project Properties – Debug – Start Action – Start external program – enter the full path of devenv.exe

  • WPF/E CTP - Nice, but...

    I just downloaded the WPF/E CTP bits (a good starting point for all things WPF/E is the new Dev Center). If you are a C# dev who has waited for the CTP as eagerly as I did, be prepared for a slight disappointment: right now you can only use Javascript, but no managed code – yet. Fortunately a blog post by Scott Guthrie gives a hint of things to come: “…We'll also be providing "WPF/E" integration with .NET managed code next year ”.

    Regarding the roadmap, the WPF/E FAQ says “Microsoft plans to deliver a customer-deployable release in the first half of 2007”, with Joe Stegman mentioning upcoming CPTs in this blog post: “Our next milestone is scheduled for February 2007 and the feature set for this is in development and mostly fixed. The milestone after that will be driven largely by customer feedback”.

  • How to Set the CSS Class on an HtmlElement Instance from C#

    I’m currently using the WebBrowser control in a WinForms application as a simple layout engine, as it’s much faster when rendering texts in front of a background image than WinForms (and I need it by the weekend, so I don’t want to take the risk of using it as a learning project for WPF). For my purposes I only need to manipulate some texts – and the CSS class of specific elements on the page.

    Now let’s assume you have an DIV tag in your HTML like this:

    <div class="someClass">Hello World</div>

    and you want to change the CSS class from your C# code. It’s pretty easy, you just have to get a HtmlElement instance representing the tag and use the SetAttribute method. What took me some time to figure out is the problem that if you call

    myHtmlElement.SetAttribute("class", "anotherClass");

    nothing will happen in the display of your page. The reason for this is that SetAttribute does not actually “set an attribute of a tag”, but a property (representing the attribute) on an object (representing the tag) in the Document Object Model (DOM) – and the property’s name is “className”, not “class”. So the correct code is

    myHtmlElement.SetAttribute("className", "anotherClass");

    (If you're wondering why SetAttribute didn't complain about using the name "class": the DOM was primarily designed to be used from Javascript, which is a language where any object can be extended by simple setting a property. Sounds a bit strange, but it’s also a feature that can be used for seriously cool stuff)

  • Firefox 2.0 : Going Back to 1.5 Style...

    Ok, I really tried, but after working with Firefox 2.0 for a few days I still don’t like the Close buttons on the tabs (I know IE7 has them, too, but that doesn’t make things more usable for me personally). Fortunately it’s simple to go back to 1.5 style:

    • Enter about:config in the address bar
    • Set browser.tabs.closeButton to 3
    • Restart Firefox

    And if you prefer the icons of Firefox 1.5, there’s a theme for you on

  • Article "Introduction to GhostDoc" up on DotNetSlackers

    Some time ago Sonu Kapoor, webmaster of, asked me to write an article about my Visual Studio add-in GhostDoc. It took me some time to find an empty spot in my busy schedule, but the article is now finally online. It is an introduction to GhostDoc that may be interesting for those who haven’t tried GhostDoc yet and would like to read a bit more about the features before actually downloading and installing it.

  • Whoops... I Just Asked a Question and Now I Won a Prize...

    Ok, the title sounds like what happens on developer conferences when you ask a technical question and suddenly the speaker pulls out a t-shirt or a book and hands it over to you. No, this one’s bigger… much bigger.

    Back in summer, I participated in the Microsoft Visual Studio Extensibility Contest with my add-in GhostDoc (did I just hear somebody yawn in the background? I’m sorry ;-). I thought to myself “Hey, GhostDoc is a valid entry according to the rules, it has a working setup, nice documentation and people like it, why not give it a try. Version 1.9.5 is almost finished, entering the contest shouldn’t be much effort”.

    Ok, forget about the “not much effort” part. The organizers wanted the projects as source code, to compile the projects and pass the result to the judges –  I guess to be able sort out at least some of the more obvious trojans that jokesters would send in. Releases of GhostDoc are built using a combination of a commercial tool (Visual Build) and a couple of custom-built tools and I couldn’t/didn’t want to give out my complete build environment, template-based documentation generation, CHM-builder, etc.. So most of the work consisted of building a package that could be copied on a fresh machine and would successfully build the MSI. Sounds easy, but it’s the small details that cost way too much time.

    Please don’t get me wrong, I’m not complaining; my colleague Jens Schaller wrote an add-in (SonicFileFinder) specifically for the contest from scratch and he definitely pulled some all-nighters and others have invested a lot of time as well.

    Anyway, when I was notified I didn’t win I wasn’t too disappointed – I was happy that I received an USB stick for participating and left the contest behind me.

    But of course I wanted to know which cool add-ins won, so I visited the website from time to time. Yesterday I saw the winners were announced. The projects of the participants that didn’t win (including me) were listed on the site as well, but without a description, just with a download link. Interested in the other add-ins I wrote a mail to the organizers suggesting to add description texts as I didn’t feel like downloading all add-ins just to find out what they are doing. And out of curiosity I asked what had happened to the third place in the add-in category, suspecting some sort of mixup during the authoring of the page.

    Well, some time later I received a mail telling me that one of the first three contestants was “no longer eligible” and that the next of the runner-ups moved up on third place – and that was me! Wow, what a surprise… An hour later the website was updated, with GhostDoc now on third place. Unfortunately the list of the runner-ups are still without description texts, but I guess that’s coming later.


  • GhostDoc meets Google Code Search

    Even though it has been fixed in version 1.3.0, the infamous "Toes the string" comment generated by GhostDoc remains a running gag among long-time users. So let's use Google Code Search to see if there's somebody out there who has used (an early version of) GhostDoc to create comments without even bothering to give them a quick look: Search Now*

    *) Note that this is a live search; at the time of this writing there were indeed three results, but this may of course change in the future.

  • When the 0.1 Version of Your Software Better be Good...

    Yesterday was the first home game of the Telekom Baskets Bonn, a team in the first division of the German Basketball League (BBL). Before you even think of a comparison to the NBA or let’s say some other European leagues keep in mind that other sports like soccer, ice hockey and handball draw much larger crowds. In Germany, basketball games played in front of audiences of around 3000 up to 8000. This is my 10th season working for the team as the second DJ. My work includes preparing music and sound effects (cutting, (re-)mixing, recording sound bites and player’s voices, etc.) and writing the software used for playing some of the music.

    Another thing I have to explain is that while the Baskets have a medium-sized budget compared to other teams in the league, we’re not exactly a rich club. So everything not directly related to paying players and fixed costs is done on a very tight budget and the level of professionalism we achieve is mostly the result of a lot of people working very hard for very little money or - in my case – a season ticket for my wife.

    Only a few weeks ago the sponsor decided that two back projection screens would be a nice thing to show their image trailer and commercials on. So we got the screens, the beamers, a notebook and two clips on DVD we should play… and the rest was up to us.

    We collected ideas, one guy whipped up a couple of good looking PowerPoint presentations, another one came up with a Flash-based solution for showing scouting data, and we had some other clips we wanted to show. What was missing was some software that would combine all this together in one solution – that’s what I did. After burning some midnight oil (after all, there’s a day job and some other stuff to do) and some frantic last-minute coding my software – called RemoteCanvas – had its big moment yesterday. A dashboard-like app communicating with a viewer app covering the whole screen, I had it running on a single notebook yesterday, but as the name implies it’s intended to be used across a network. Things went pretty well, but of course I was pretty nervous during the whole game as one thing you don’t want to happen is something going wrong on two large projection screens in front of 3400 spectators…

    There’s a lot of work left to do and I have two home games coming up the next weekends, but when things calm down a bit I’ll blog about a thing or two I’ve learned during the development of the software.

    Here are some photos of my workplace near the sideline:

    20061008_LaptopMania 20061008_TwoScreens 20061008_ScreenShot


  • GhostDoc wins the Audience Award at BASTA! Conference

    20060921_AwardI’m back from Mainz, where I visited the BASTA! conference. As mentioned in my previous post, my Visual Studio add-in GhostDoc was one of the ten nominees for the BASTA! .Net Award. First to fifth place were awarded by a jury – GhostDoc couldn’t score here.

    Then the audience was asked to raise hands for each of the ten nominees. In the end SharpDevelop and GhostDoc went head to head, getting the largest number of votes by far, with GhostDoc leading by three votes. So….

    GhostDoc wins the BASTA! .NET Audience Award of 1000 EUR*  !

    At the time of the vote SharpDevelop had already won one of the jury’s prizes (3rd place), I guess that worked slightly in my favor. But nevertheless, receiving so many votes from the audience, devs like me, really means a lot to me. One of the other winners even came up to me and said “we’re all using GhostDoc at my company, it’s great!” – that’s nice to hear.

    Updated 2006-09-21:

    *1000 EUR = 1268.69$ as of 2006-09-20

  • GhostDoc Nominated for BASTA! .NET Award 2006

    Wow… my Visual Studio add-in GhostDoc was selected out of 32 proposals for the German .NET Award 2006 sponsored by BASTA!, magazin, msdn magazin (deutsche Ausgabe), entwickler magazin and SQLCON 2006 to be one of 10 nominees for the final round.

    The nominees are, in no particular order (the linked pages are in German, sorry):

    A total of 20000 EUR (over 25000 USD) are be won for 1st down to 6th place. Hey, with the 6th place winning 1000 EUR, I’d happily settle for that . But the competition is tough, with some heavy-weights like SharpDevelop and ComfortASP.NET in the mix. On the other hand, I don’t have to beat them, I only have to leave 4 other nominees behind me (which I think will be tough enough).

    The award ceremony will be held on 20th of September as part of the BASTA! conference in Mainz. Originally I hadn’t planned to visit the conference, but as it’s not that far from Bonn, I’ll take a day off and drive to Mainz.

    P.S. I’d like to thank Albert Weinert for convincing me to enter a proposal as I was feeling a bit intimidated by the premise of an award “for the best, most innovative, and most important contributions to .NET coming from Germany, Austria and Switzerland”.

    Update 2006-09-15: Seems like I have to leave 5 (not 4) competitors behind me... in a mail clarifying what is happening when during the award ceremony it is mentioned that 1st to 5th place according to the judges get prizes and that one prize will be awarded by the audience (no chance for GhostDoc on that one, given the competition of e.g. SharpDevelop). Whatever; I look at the whole situation like this: I don't have to pay entry fees to the BASTA! conference for that day and I'll take what I can get in terms of interesting sessions. So even if GhostDoc doesn't make the Top 5, I still have gotten something nice from being in the Top 10.

  • SonicFileFinder 1.2 Released

    Jens Schaller has released version 1.2 of his free Visual Studio add-in SonicFileFinder.

    In a typical case of “less is more”, Jens has taken a hard look at how to specify the file filter and has reworked it completely, ripping out the different options (compare prefix vs. find text in name). They can now be expressed by using file wildcards (*, ?). In a situation where speed all that counts, it’s the fastest way to express what you are looking for. And the wildcards don’t get in your way; entering e.g. “SomeText” is equivalent to “*SomeText*”. Allowing file wildcards was actually my personal killer feature of the DPack File Browser that even made me consider to switch (at least for a moment), but seems like Jens has listened carefully when I talked about DPack at lunch time ;-)

    Version 1.2 also offers better configuration of the GUI, allowing to switch off features that either take up screen real estate (e.g. the “Match” column) or you simply don’t want to see.

    For full details, see this post on Jens Schaller’s blog.

  • SonicFileFinder 1.1 Released

    My colleague Jens Schaller has released a new version of his free Visual Studio add-in SonicFileFinder, addressing a couple of issues I pointed out in my review. More details in his blog post.

    I'm also playing around with DPack, which - among other things - offers a file search capability (and is also using a popup dialog). Initial impression is positive, but it's too early for a detailed review. Thanks to Jon Galloway for the pointer.

  • Add-in Comparison: VSFileFinder 2005 vs. SonicFileFinder

    Back in the days of Visual Studio .NET 2003 one of the add-ins that I installed on every system was VSFileFinder by Jonathan Payne, originally published as a Code Project article and later hosted on his own website. The add-in displayed a list of all files of a Visual Studio solution inside a tool window, and by typing text in a field above the list, it was possible to restrict that list to show only the files names containing the typed test – all of this interactively (here’s an animated GIF to give you an idea). Then Visual Studio 2005 came out, but there was no updated version of VSFileFinder, so after I moving all my work to 2005, I had to learn live without it.

    When the Microsoft Extensibility Contest was announced in May and my colleague Jens Schaller wondered whether he should participate and what kind of add-in he could write, I immediately said “I’d like to have a VSFileFinder clone for Visual Studio 2005, why don’t you write one?”. What we didn’t know was that in the meantime Jonathan, the author of the original VSFileFinder, had worked on a complete rewrite for Visual Studio 2005 called VSFileFinder 2005 (website).

    When VSFileFinder 2005 was released in June, it didn’t discourage Jens from continuing with his own add-in called SonicFileFinder (a small wordplay based on his last name, “Schall” is the German word for “sound”). He completely avoided looking at the other add-in, so in the end his version turned out slightly different.

    A couple of days ago Jens released a first public version of his SonicFileFinder (website), and a new version of VSFileFinder came out yesterday, so it’s a good time to compare these two competing add-ins.

    1. Installation

    VSFileFinder 2005 (tested version: 1.2) installs itself into “My Documents\Visual Studio 2005\Addins” (two files, .addin and .dll), which is not a good idea, as I had to learn myself the hard way with GhostDoc 1.9.0 – I had quite a few complaints from people who had their “My Documents” folder on a network drive. Anyway, on my system, I started Visual Studio after setup had finished and the tool window appeared.

    SonicFileFinder (tested version 1.0) uses the same approach as the most recent versions of GhostDoc and installs itself to a user-chosen location. During setup a .addin file pointing to that location is generated and written to one of the folders searched by Visual Studio for .addin files. When starting Visual Studio for the first time after the setup has finished, a couple of configuration dialogs appear for choosing

    • a hotkey (the list of suggestions is somewhat limited in version 1.0, though)
    • the usage mode (popup window or tool window). One thing I requested during development of SonicFileFinder was to be able to show the file list in a popup window that would open by pressing a hotkey and close when no longer needed, thus saving screen space. Jens didn’t want to throw the tool window idea out altogether, so he included it as an option.

    2. Getting Started

    Out of the box, the tool window of VSFileFinder 2005 looks like that of the VS.Net 2003 version. It is floating by default, but I prefer to have it as a dockable window (maybe a matter of personal taste, but if I have a window floating around that I cannot close by pressing Escape, it sooner or later gets in my way):


    You enter some characters and immediately the list is updated to show only those files containing the typed text:


    You can then either click on the file name to open the file immediately, or use the cursor keys to select a file and press Enter to open it. It is recommended to map a hotkey to the command VSFileFinder2005.Connect.VSFileFinder (via “Tools -> Options -> Environment -> Keyboard”), so you can activate the window and jump directly to the input field in no time.

    SonicFileFinder uses a modal window by default to display the file list. You either hit the hotkey or chose “Tools -> SonicFileFinder -> Start search” and the following dialog pops up:


    The basic usage is the same as with VSFileFinder 2005, enter some text and the list is filtered:


    Then, to open a file, either double click it, or use the cursor keys and press Enter. The dialog closes immediately.

    Notable differences in the file list:

    • The full file paths are specified relative to a common base directory, which saves some horizontal space
    • The “Match” column specifies how good the match is (in percent)
    • The list can be sorted (small bug in 1.0: the selected item changes when changing the sorting)

    In tool window mode, SonicFileFinder shows less files in the same amount of space as VSFileFinder 2005, because of the bar at the bottom of the window:


    Like in popup mode, you have to double-click a file to open it (different from VSFileFinder 2005 where you single-click the file).

    3. Advanced Features

    For VSFileFinder 2005 it is possible to define filters for file extensions so certain files are not displayed in the list. VSFileFinder 2005 also has the option to highlight certain files in a different color. I never really missed “positive highlighting” of specific files (e.g. in bright colors), but what came into my mind as a possible use was e.g. to color WinForms designer files (.Designer.cs) in dark grey instead of black.

    SonicFileFinder lacks both these two features. A handy feature that it offers over VSFileFinder 2005 is the Explorer button. Clicking the button (or hitting Ctrl-E) opens an explorer window for the folder containing the currently selected file. That’s a feature you may not use all the time, but when you need it, it’s a huge time-saver.

    I once had good use for the “Match” column in a huge solution where sorting by this column brought up the files I was looking for (I knew only a part of the name, which unfortunately was very common so I had lots of hits), but I’d like to have an option to turn it off.

    The “live preview” option (which opens the currently selected file) is a bit annoying when moving the cursor by pressing the arrow keys, unintentionally opening e.g. .ico files. Fortunately, it’s turned off by default. I honestly think this needs some rework.

    6. Final Verdict

    VSFileFinder 2005 comes without any documentation at all, not even a Read Me, and the website isn’t that informative as well, but on the other hand it’s no rocket science to install and use this add-in. My opinion: If you want an exact port of the original VSFileFinder, get this add-in. When you need a tool window showing the files all the time, every bit of screen real estate counts and in this regard VSFileFinder is better than SonicFileFinder (where the bar at the bottom takes its toll).

    SonicFileFinder goes for a “polished” look and feel, comparable to that of GhostDoc. There’s some slight “fluff” of having the bar at the bottom of the window, or the “Match” column in the file list, but while that may matter in tool window mode, it simply isn’t a factor in popup mode. And the popup dialog (and the ability to get rid of it fast either by opening the selected file or by pressing Escape) is my personal killer feature of this add-in. So if the thought of yet another tool window competing for screen space scares you, you should definitely go for SonicFileFinder.

    7. Resources

  • GhostDoc 1.9.5 Released

    GhostDoc is a free add-in for Visual Studio that automatically generates XML
    documentation comments for C#. Either by using existing documentation inherited
    from base classes or implemented interfaces, or by deducing comments from
    name and type of e.g. methods, properties or parameters.

    This release contains minor updates of the documentation and changes regarding the text generation.

    • Changed: References generated by the $(ShortName...) and the $(FullName...) macros no longer generate the "T:" prefix, as this prevented the compiler from detecting broken references to renamed classes (thanks to forum user “erwind” for pointing out various issues with the "kind of" identifiers). Note that GhostDoc currently does not remove the qualifiers from inherited documentation.
    • Changed: Most generated texts now use the $(FullNameAsSee) macro, with the exception of the summary for constructors.

    Download on the GhostDoc website.

  • How to Determine the Localized Name of the Scope for a Key Binding (Dirty Hack)

    Here’s a tip I actually wanted to share some time ago, but kind of forgot about it until I got reminded by a recent post by Thomas Müller who I had nice contact with some months ago.

    In order to assign a keyboard shortcut to a Visual Studio command from code (e.g. in an add-in), one has to specify a binding consisting of the shortcut’s scope (e.g. “Global”, or “Text Editor”) and the actual keys to be pressed (e.g. “ctrl+shift+d”). For example in C#:


    DTE2 objApplication;
    Command cmd=objApplication.Commands.Item("TheNamespace.TheClass.TheCommand", -1);
    cmd.Bindings="Text Editor::Ctrl+Shift+D";


    (The example shows how to assign a single shortcut. Multiple shortcuts can be assigned, please see this entry in the MSDN libary for more details)

    When Microsoft released the international versions of Visual Studio 2005, I received a lot of feedback from users of my add-in GhostDoc who ran into problems during setup with the creation of the hotkey for the “Document This” command. Debugging GhostDoc on a German version of Visual Studio 2005 (which by the way was a strange experience as I never had used a developer tool in my native language before), I found out the following:

    • When you read a binding of a command (in C# by casting the Bindings property of a Command instance to object[], and casting an array item to string), you get the localized text (e.g. “Text-Editor::Strg+Umschalt+D” in German Visual Studio 2005)
    • When you define a binding using the localized text, you get an error (hmm…).
    • When you define a binding using the non-localized text, you get an error (huh?).
    • You have to define a binding using the localized scope and the non-localized key names (…mkay).

    But where to get the localized name of the scope from? I couldn’t find anything on the web, and posting a question in the MSDN Extensibility Forum didn’t help either.

    What I did in the end must be considered a dirty hack and should be used with caution:

    • In my case, I needed the localized name for “Text Editor” (“Text-Editor” in German, “Editor de Texto” in Spanish).
    • I chose a command that – at least with a high probability – never would be assigned to an other scope than “Text Editor” (Edit.DeleteBackwards) and read the first entry of its bindings.
    • The sub-string up to the “::” was the desired localized name of the scope.

    Here's the C# code to do that (all error handling stripped):

    Command cmd=objApplication.Commands.Item("Edit.DeleteBackwards", -1);
    object[] arrBindings = (object[]) cmd.Bindings;
    string strBinding = (string)arrBindings[0];
    string strScope = strBinding.Substring(0, strBinding.IndexOf("::"));


    By now, every professional developer should have bad feeling about this solution – there are just too many coding catastrophes in the history of computing that started with “it should be safe to do that, nobody will ever…”. So if you have a better solution, please let me know. If you do chose to go that route and need the localized name of an other scope than “Text Editor”, make sure you chose the command veeeery wisely.

  • Three Years of Blogging

    Three years ago on this day I started this blog… Originally, I had planned to write a blog entry looking back at some of the stuff that happened since my “Two years of Blogging” post. But suddenly outside the wind died down completely, so I took my little electric R/C plane (which doesn’t like any wind at all) to the next football (soccer) field.

    The weather was just incredible (not a single cloud to be seen!) and with the moon up in the sky, I just had to take a picture. Unfortunately I didn’t have my digital camera with me, so – in true geek style – I used my XDA Neo (aka HTC Prophet). Taking a picture and controlling the plane at the same time proved to be a bit difficult, so I made only one attempt, but that turned out pretty well:


    A little closer:



  • Nette Kollegen für Bonn gesucht (non-english Post)


    Die Abteilung infonea, in der ich bei Comma Soft (Standort Bonn) arbeite, will sich verstärken und sucht neue Leute:

    • ein Projekt-Consultant / -Leiter (w/m)
    • ein Software-Entwickler (w/m) für das Produkt-Team

    Informationen dazu in der Stellenanzeige in der aktuellen c’t (14/2006, Seite 271), oder etwas detaillierter auf unserer Website, nämlich hier (Consultant) und hier (Entwickler).


    Besonders am Herzen liegt mir die Ausschreibung für den Software-Entwickler für das Produkt-Team, schließlich geht es um einen zukünftigen direkten Kollegen! Daher dazu noch ein paar weitere Infos:

    Das Produkt-Team ist ein ziemlich fitter Haufen Software-Entwickler (Entwickler, nicht Programmierer!), jeder einzelne in der Lage, auch komplexe Aufgaben eigenständig von der ersten Skizze auf einem Blatt Papier hin zu einem erfolgreichen Ergebnis zu führen. Dabei sind wir keine Ansammlung von egozentrischen Einzelkämpfern; wir legen Wert darauf, gemeinsam zur bestmöglichen Lösung zu kommen. Kommunikation und Know-How-Austausch sind uns wichtig. Gleichzeitig können wir darauf vertrauen, dass die Implementation auch dann in guten Händen ist, wenn nicht ständig jemand drüberschaut (wobei die Arbeit nicht zwangsläufig alleine geschehen muss: bei bestimmten Modulen haben wir auch schon mehrfach erfolgreich Pair Programming eingesetzt – es kommt halt immer auf die jeweilige Situation an).

    Das gegenseitige Vertrauen und die entspannte Zusammenarbeit ohne politische Grabenkämpfe funktionieren deshalb, weil wir die richtigen Leute mit der richtigen Einstellung und den richtigen “Skillz” haben. Um so wichtiger ist es nun, dass wir uns wirklich passend verstärken. Wie heisst es in der Anzeige in der c’t: “Wissensmanagement braucht kluge Köpfe. Wir suchen die Netten davon”. Das trifft es ziemlich genau.


    Was wird das Einsatzgebiet des neuen Entwicklers sein? Sagen wir mal so: Die Liste der Dinge, um die wir das Produkt infonea erweitern wollen, ist lang. Wir verwenden so ziemlich jede .NET-Technologie irgendwo in unserem Produkt. Wir arbeiten sowohl mit ASP.Net als auch WinForms. Ob Webservices oder hochinteraktive GUIs, ob Anwendungsprogramm oder Entwicklungstool – es gibt bei uns im Team eine Vielzahl von Themen. An welcher Stelle wir uns verstärken, hängt auch ein wenig davon ab, welche Kenntnisse der neue Entwickler mitbringt, insbesondere in Bezug auf das in der Anzeige gewünschte Experten-Know-How (wobei die Beispiele wirklich nur als Beispiele zu verstehen sind). Gibt es einen Bereich, in dem Du richtig gut bist? Lass es uns wissen!

    Generell gilt: schon fast wichtiger als breite Grundkenntnisse im .NET-Bereich (da kann man viele Dinge auch noch bei Bedarf lernen) ist es, dass der neue Entwickler Erfahrung darin hat, Software zu entwickeln und mit einem hohen Anspruch an Qualität auslieferfähig zu machen (yeah, ship it baby!). Wir lassen es dabei erst einmal offen, ob ein Alter Hase mit langer Produkterfahrung, oder ein Absolvent frisch von der Uni (der z.B. nebenher gearbeitet, im Web eigene Software veröffentlicht, oder an Open Source Projekten mitgearbeitet hat) der Richtige für uns ist. Ich persönlich habe z.B. direkt nach der Uni bei Comma Soft angefangen (vor fast 10 Jahren, wow wie die Zeit vergeht), hatte aber schon während des Studiums sowohl im Nebenjob als auch in der Freizeit erfolgreich entwickelt.

    Noch ein paar Worte zum Umfeld: Comma Soft hat seinen Bonner Standort im Stadtteil Pützchen (östlicher Stadtrand), ca. 5 Minuten von der A59 entfernt. Das Gebäude liegt in der Nähe des Waldes, zu Fuß sind es nur ein paar Minuten zum Freibad Ennert (jetzt im Sommer eine nette Sache in der Mittagspause). In den Büros lässt sich angenehm arbeiten, die Teilnehmer der User-Treffen von Bonn-to-Code.Net zeigen sich regelmäßig angetan von den Räumlichkeiten und der Einrichtung. Bonn selbst ist eine nette Uni-Stadt mit ca. 310000 Einwohnern, und Köln ist auch nur 30 Minuten entfernt.

    Fragen zu technischen Themen oder der täglichen Arbeit beantworte ich gerne, ansonsten sei auf die Kontaktadresse in der Anzeige oder der Website verwiesen.

    Also: Meldet Euch, vielleicht arbeiten wir ja bald zusammen!

  • BASTA Award 2006 (non-english post)


    Dieses Jahr wird im Rahmen der Konferenz BASTA! ( erstmalig der BASTA Award verliehen. Zitat aus der Ankündigung:

    Mit dem Award sollen die besten und innovativsten Projekte aus Deutschland, Österreich und der Schweiz im Bereich .NET gefördert und mit nicht weniger als 20.000 Euro gewürdigt werden. Dabei kann es sich um ein Produkt, eine Technologie, ein Forschungsthema, eine Organisation, ein Buch oder einen beliebigen anderen Beitrag handeln. Im Mittelpunkt steht der Wert, den die Innovation für die Welt von .NET darstellt.

    Einsendeschluss ist der 31. Juli 2006, mehr Informationen unter

  • Disclaimer


    Roland Weigelt
    Langwartweg 101
    53129 Bonn
    blog AT

    Content is the private, non-commercial weblog of Roland Weigelt. All texts, images and programs - if not mentioned otherwise - were created in the author's spare time using his own software and hardware and are property of and copyrighted to the author. If not accompanied by explicit license and/or terms of use, any software published on this weblog is bound to the following terms of use:

    This software is provided 'as-is', without any express or implied warranty.
    In no event will the authors be held liable for any damages arising from the use
    of this software.

    Permission is granted to anyone to use this software for any purpose, including
    commercial applications, and to alter it and redistribute it freely, subject to
    the following restrictions:
    - The origin of this software must not be misrepresented; you must not claim
    that you wrote the original software. If you use this software in a product,
    an acknowledgment in the product documentation would be appreciated but is
    not required.

    - Altered source versions must be plainly marked as such, and must not be
    misrepresented as being the original software.

    The author does not warrant the accuracy, reliability, or timeliness of any information on this website and shall not be liable for any losses caused by such reliance on the accuracy, reliability, or timeliness of such information. This publication is provided "as is" without warranty of any kind, either express or implied, including, but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.

    All trademarks and copyrighted names, images, or other information are property of their respective owners. The presence or absence of the copyright or trademark sign does not affect the legal status of any trademark or copyright in any way.


    The pages of this website contain links to other websites which are not under the author's control. The author is not responsible for the contents of these websites. Following these links is at your own risk.

    Privacy Statement

    This website allows to contact the author. The author will not disclose your email address or any other personal information to third parties without your explicit agreement.

  • GhostDoc 1.9.4 (for Visual Studio 2005) Released


    A couple of issues were found shortly after the release of version 1.9.3 yesterday, so here’s version 1.9.4 of GhostDoc for Visual Studio 2005 (download on the GhostDoc website)

    • Fixed: Installation "for everyone" not working in 1.9.3 (since preview 3).
    • Fixed: Configuration dialog using huge amounts of CPU time when clicking certain parts.
    • Fixed: Inherited documentation in VB.Net sometimes being garbled.

    Here’s my usual disclaimer: VB.Net support is regarded as "experimental",  it is turned off by default and you have to turn it on in the configuration dialog.

    For a list of what was new in 1.9.3 see this blog post.

  • Impressum


    Roland Weigelt
    Langwartweg 101
    53129 Bonn
    blog AT

    Inhalte ist das private, nicht-kommerzielle Weblog von Roland Weigelt. Alle Texte, Abbildungen und Programme sind - wenn nicht anders erwähnt - in meiner Freizeit und mit meinen eigenen Mitteln entstanden und unterliegen daher meinem Urheberrecht. Für Programme gelten die jeweils mitgelieferten Nutzungsbedingungen, bzw. - wenn keine Nutzungsbedingungen mitgeliefert werden - automatisch folgende Bedingungen:

    Diese Software wird "WIE SIE IST" zur Verfügung gestellt, ohne jede Gewährleistung.
    In keinem Fall kann der Autor dieser Software für igendwelche Schäden durch Gebrauch
    oder nicht-Gebrauch dieser Software verantwortlich gemacht werden.

    Die Benutzung dieser Software ist für jeden und für jeden Einsatzzweck, kommerzielle
    Anwendungsfälle ausdrücklich eingeschlossen, erlaubt. Veränderungen und/oder die
    Weiterverbreitung ist unter den folgenden Bedingungen erlaubt:

    - Die Herkunft der Software darf nicht falsch dargestellt werden; der Verwender
    darf nicht behaupten, er hätte die Software geschrieben. Bei Verwendung der
    Software in einem Produkt ist eine Erwähnung in der Produktdokumentation
    durchaus erwünscht, ist jedoch keine Voraussetzung und geschieht auf freiwilliger

    - Veränderte Versionen der Software müssen klar als solche gekennzeichnet sein,
    auch darf nicht der Eindruck erweckt werden, dass es sich um die ursprüngliche
    Software handelt.

    Die Inhalte dieser Seiten wurden sorgfältig geprüft und nach bestem Wissen erstellt. Allerdings wird für die hier dargebotenen Informationen kein Anspruch auf Vollständigkeit, Aktualität, Qualität und Richtigkeit erhoben. Daher kann keine Verantwortung für Schäden übernommen werden, die durch das Vertrauen auf die Inhalte dieser Website oder deren Gebrauch entstehen.

    Alle für Dritte geschützte Gebrauchsnamen, Handelsnamen, Warenzeichen, eingetragene Warenzeichen usw. werden anerkannt. Das Fehlen einer entsprechenden Kennzeichnung auf der Internetseite bedeutet nicht, dass es sich um einen freien Namen im Sinne der Waren- und Markenzeichengesetzgebung handelt Kontakt


    Auf den Seiten von befinden sich Links zu anderen Websites im Internet. Zum Zeitpunkt des Eintrag waren auf den verlinkten Websites keine rechtswidrigen oder beleidigenden Inhalte fest zu stellen, jedoch wird ausdrücklich darauf hingewiesen, dass der Betreiber von keinen Einfluss auf die Gestaltung und den Inhalt dieser verlinkten Websites hat, und sich ausdrücklich von rechtswidrigen oder beleidigenden Inhalten der verlinkten Seiten distanziert.


    Innerhalb des Internetangebots besteht die Möglichkeit, Kontakt mit dem Autor aufzunehmen. Dies erfolgt auf freiwilliger Basis, die Daten werden nicht an Dritte weitergegeben.

  • GhostDoc 1.9.3 (for Visual Studio 2005) Released


    Version 1.9.3 is a bugfix release of GhostDoc for Visual Studio 2005 (download on the GhostDoc website) dealing mostly with installation problems.

    • Fixed: GhostDoc not appearing in Visual Studio on systems that had Extensibility.DLL missing in the GAC (caused by uninstallation of other add-ins with buggy installers).
    • Fixed: GhostDoc not working on international (i.e. non-US) versions of Visual Studio:
      • Assignment of keyboard shortcuts not working on non-US versions
      • "Tools" menu not found on "Chinese Simplified" systems
    • Fixed: Problems with multiple users on a single machine.
    • Fixed: Problems with users working under non-admin accounts (MSI installation still requires admin permissions).
    • Fixed: Documentation of indexers in VB.Net (remaining known issue: VB.Net indexers are treated like C# indexers - no explicit <param> tag for the parameter, only the first parameter is mentioned)
    • Changed: Summaries of VB.Net properties in interfaces now start with "Gets or sets ..." (remaining known issue: ReadOnly properties are not handled correctly, but that's not easy to correct right now)

    Because of the known issues mentioned above, VB.Net support will still remain "experimental" in this release, so it is turned off by default and you have to turn it on in the configuration dialog.

    • Speeding up the C# Source Code Editor

      Sometimes, the C# source code editor feels a bit sluggish, even on pretty fast systems. One way to speed it up a little is by turning off the navigation bar (the drop down lists above the code window).


      • “Tools” menu -> “Options”
      • “Text Editor” -> “C#”
      • Uncheck “Navigation bar” under “Display”


      Of course, the navigation bar is there for a reason and some people just can not live without it. But if you’re like me, and don’t use all the time, you may find the following macro for toggling the navigation bar helpful:

      Sub ToggleCSharpNavigationBar()
          Dim objShowNavigationBar As EnvDTE.Property
          objShowNavigationBar = DTE.Properties("TextEditor", "CSharp").Item("ShowNavigationBar")
          objShowNavigationBar.Value = Not objShowNavigationBar.Value
      End Sub


      • Open the Macros IDE (“Tools” -> “Macros” -> “Macros IDE”)
      • Either create a new module or use an existing one (e.g. I have a module “Misc” where I collect all my small macros) and paste the code into it.

      You could assign the macro to a hotkey (Tools -> Options -> Keyboard), but even though I use hotkeys a lot, for this macro I prefer an icon in a toolbar near the navigation bar:

      • Right click the toolbar area -> “Customize”
      • The “Customize” dialog opens
      • On the “Toolbars” tab: Create a new toolbar (e.g. "My Macros")
      • Drag the (floating) toolbar to the toolbar area and move it somewhere near the navigation bar.
      • On the “Commands” tab: Click the category "Macros"
      • Choose the macro (e.g. "MyMacros.Misc.ToggleCSharpNavigationBar") from the “Commands” list and drag it to the toolbar

      The toolbar will look something like this:

      • Copy the following image 20060516_ButtonImage to the clipboard
      • Back in Visual Studio, right click the macro name -> “Paste Button Image”
      • Right click the macro name -> “Default Style”
      • Right click the macro name -> “Name” -> Enter "Toggle Navigation Bar"
      • Close the “Customize” dialog

      The button on the toolbar is now ready to use and will look like this:

    • GhostDoc: Looking for International Beta Testers

      I’m in the process of getting GhostDoc 1.9.3 out the door. This is mainly a bugfix release adding support for international versions of Visual Studio 2005. If you are using a different combination than

      • Visual Studio 2005 (English) on any language version of Windows
      • Visual Studio 2005 (German) on a German Windows version

      and if you are interested in trying an installation of version 1.9.3, please send an email to, I’ll get back to you in the next days.

      Please include the following information in your email:

      • Language of your OS
      • Language of your Visual Studio 2005

      Please note that the preview version sent out to testers does not contain any hot new features, so if 1.9.2 is running on your system just fine, you won’t miss anything.

      Update: The new version has been released, the email address is now disabled (too much spam).

    • Bonn-to-Code.Net: Reges Interesse an AJAX (non-english post)

      Zum dritten Treffen der User Group “Bonn-to-Code.Net” fanden sich insgesamt 25 Personen in den Räumen der Comma Soft AG ein, eine neue Bestmarke für die noch junge Gruppe. Das Hauptthema an diesem Abend war “AJAX mit .NET”; Albert Weinert führte in die Grundlagen ein und zeigte einige Beispiele für AJAX-Entwicklung mit Hilfe von Ajax.NET Professional. Der Vortrag war für viele ein erster Blick hinter die Kulissen, die z.T. “dreckigen” Details waren für den einen oder anderen schon sichtlich ein Schock. Albert gelang es in seinem Vortrag sehr gut, sachlich und mit viel praktischer Erfahrung im Rücken auf Vor- und Nachteile einzugehen, und AJAX dabei weder zu hypen, noch zu verteufeln.

      An diesem Abend wurde auch erstmals das Format der sog. “QuickTip”-Vorträge (einige wenige Folien, Problem – Lösung – Fertig) getestet, als Testballon dienten meine RegionTools-Makros. Das Feedback war durchweg positiv, bei zukünftigen Treffen wird es nun stets einen oder mehrere solcher Mini-Vorträge geben.


      20060419_MayMeetingAttendees  20060419_MayMeetingBreak  20060419_MayMeetingRolandWeigelt

    • A Sneak Peek at GhostDoc 2.0

      In order to be able to generate better documentation comments, the next major version of GhostDoc not only looks at identifier names, but also performs some in-depth code analysis. Here are some screenshots:






      Update 2006–04–02: Ok, ok, just kidding… just a little April Fool’s joke…

    • Bonn-to-Code.Net: Auch das zweite Treffen ein Erfolg (non-english post)

      Obwohl einige Teilnehmer des ersten Treffens fehlten (u.a. verhindert durch Urlaub, Krankheit oder Terminstress) fanden sich auch beim zweiten Treffen der User Group “Bonn-to-Code.Net” wieder 14 Personen in den Räumen der Comma Soft AG ein. Das Programm bestand aus Vorträgen von Jens Schaller (Code Snippets), Roland Weigelt (WinForms Tipps und Tricks) und Oliver Bollmann (Plugin-Framework), aufgelockert durch kleine Videos zwischendrin (ein "Best of Yesterworld", sowie das berühmt-berüchtigte "Microsoft iPod Package" Video).

      Der nächste Termin wurde auf den 18. April 2006 um 19:00 festgelegt.

      20060221_SecondMeetingJensS 20060221_SecondMeetingRolandW 20060221_SecondMeetingOliverB

    • Code Snippet for a Divider Comment

      Name: Divider
      Description: Inserts a Divider Comment.
      Shortcut: div

      // text

      Download: Divider.snippet

      Funny, this wildly unspectacular snippet is one of my most-used. For previous versions of Visual Studio, I had a macro for inserting this comment, but code snippets are much better, as they disturb the natural flow of typing much less.

    • Bonn-to-Code.Net: Ein erfolgreicher Start (non-english post)

      Insgesamt 14 Personen fanden sich gestern Abend für das erste Treffen der User Group “Bonn-to-Code.Net” in den Räumen der Comma Soft AG in Bonn-Pützchen ein. Das Treffen stand ganz im Zeichen des Kennenlernens, dazu stellte jeder Teilnehmer in einer kurzen Präsentation sich, seine Kenntnisse und seine Interessen vor. Danach wurden erste Vorschläge für Vorträge bei den nächsten Treffen gesammelt und auch gleich der nächste Termin (21. März 2006) festgelegt.

      Hier ein paar Bilder:

      20060214_FirstMeeting1  20060214_FirstMeeting2 20060214_FirstMeeting3 20060214_FirstMeeting4

    • Taking Care of a Developer's Most Important Tool...

      Today I finally took the time to completely clean my keyboard (a Cherry G80–3000). I removed all keys, cleaned the area behind the keys with a vacuum cleaner (uh.. disgusting) and used soap and warm water to wash the keys (oh look how bright they are now!). It’s not that I didn’t take care of my keyboard at all before, but after some years of use, superficial cleaning with a damp cloth just isn’t enough.

      Some pictures:

      20060129_KeyboardWashing    20060129_KeyboardDrying

      20060129_KeyboardBeforeSorting    20060129_KeyboardComplete

      Ahhh… Almost like having a brand new keyboard!


    • My Personal Fonts and Colors Settings for Visual Studio 2005

      After reproducing my old VS.Net 2003 settings (using a proportional font) on Visual Studio 2005 and playing around with features like bold fonts, I’ve finally settled on fonts and colors settings. Here’s a preview what source code looks like:


      Download: FontsAndColors.vssettings.

      When you import the settings using the “Import and Export Settings Wizard” (in the Tools menu), please do yourself a favor: Keep the default “Yes, save my current settings” and create a backup of your settings, so you can go back to your old fonts and colors if you want.

    • .NET User Group für Bonn und Umgebung (non-english post)

      Neben den meist flüchtigen Kontakten, die sich über mein Blog und meine Arbeit an GhostDoc ergeben, würde mich auch gerne mal “live” mit anderen Entwicklern auszutauschen. Da ich im Köln/Bonner Raum keine andere .NET User Group gefunden habe (und mir Fahrten nach Düsseldorf und Essen auf Dauer zu weit sind), versuche ich einfach mal eine eigene Gruppe auf die Beine zu stellen - schließlich ist ein Neues Jahr auch immer ein guter Zeitpunkt, um etwas Neues anzufangen.

      Daher habe ich am 1.1.2006 die .NET User Group “Bonn-to-Code.Net” gegründet.

      Weitere Infos gibt es auf der Website unter