Babybauchbemalen

Immer wieder mal was neues ausprobieren. Gestern im letzten Kursabend des Vorbereitungskurs für werdende Eltern, durften wir den Bauch der Mama bemalen.

Was ich gemacht habe:

Das links ist das Facebook-Logo, das rechts ein „Like“ und in der Mitte das aus meiner Sicht sehr informative Diagramm von Jeff Atwood über das Eltern-Sein.

Solving „Exception of type ‚System.ComponentModel.Design.ExceptionCollection‘ was thrown.“ error messages in Visual Studio .NET 2010 Windows Forms Designer

Recently I got an error message

---------------------------
Microsoft Visual Studio
---------------------------
Exception of type 'System.ComponentModel.Design.ExceptionCollection' was thrown.
---------------------------
OK
---------------------------

when trying to edit a form in the Windows Forms Designer of Visual Studio .NET 2010. Searching Google for this error brought up some results but didn’t help me.

There was one hint that stated:

Sometimes I get the message „Exception of type ‚System.ComponentModel.Design.ExceptionCollection‘ was thrown“ When trying to open a Form in designer view.

The real problem of the „ExceptionCollection“ being thrown is that when there is a WSOD (White Screen of Darn) indicating a designer load issue, the designer gets unloaded. These get caught by the unload method and get displayed in the dialog box you see.

So, to fix this you should:

  • Attach a visual studio debugger to VS. Turn on exception catching when first thrown (in the Debug|Exceptions menu).
  • Open the designer with the debugger attached
  • Determine what component is throwing the exception.

This was actually a copy from a Microsoft Connect bug report. I tried this, but the error message still popped up and the debugger never stopped at this message (although it stopped at other native errors).

Steps to solve

Since all this didn’t help, I did another approach that was finally successfully:

  1. Make a SVN commit for the file.
  2. Open the „*.designer.cs“ file of the form that shows the error in source view.
  3. Remove larger blocks of form element declarations.
  4. Fix all compilation errors with ReSharper (i.e. ensure that nothing is red anymore on the side-indicator).
  5. Save the file. No need to compile.
  6. Open the Windows Forms Designer of the form.
  7. If the error still shows up, do a SVN revert to go back to the initial state.
  8. Repeat steps 2 to 7 until the error does not show up anymore.
  9. Now you’ve encircled the erroneous child control that causes the error.
  10. Repeat steps 2 to 7 with a smaller amount of controls you remove, until you have only one control left.

In my case it was a user control inside a group control inside a tab control, so I first identified the tab control, then the group control and then the user control.

You could isolate the user control inside a new form to further investigate. In my case it was rather easy; I put checks for design mode around most of the functions inside my control to ensure the code only gets executed if the control is not in design mode.

This fixed my error.

See also:

Verstopftes Senseo-Sieb säubern

Unsere Senseo-Kaffemaschine hat vor kurzem noch groß gedröhnt und dann beim Kaffee-durch-das-Sieb-Drücken kam nix mehr raus.

Nach kurzem Googlen war das Sieb wohl verstopft. Tipps gingen von neu kaufen, über „mit Nadel durchstechen“ bis hinzu „in Essig-Essenz einlegen“.

Da ich keine Essig-Essenz hatte, habe ich folgende Schritte unternommen:

  1. Aus dem Sieb das innere schwarze Plastikteil mit dem Sieb drin rausdrücken.
  2. Das Sieb über Nacht in Balsamico-Essig einlegen.
  3. Am nächsten Tag den Sieb in eine große Kaffeetasse legen.
  4. Ein Spülmaschinen-Tab hinzugeben.
  5. Entkalkungssalz für Spülmaschinen großzügig in die Tasse geben.
  6. Im Wasserkocher Wasser zum Kochen bringen.
  7. Das kochende Wasser in die Tasse geben.
  8. Gut umrühren.
  9. Eine Stunde ziehen lassen.
  10. Für weitere paar Stunden stehen lassen.
  11. Alles in die Mikrowelle geben, mit einer Untertasse abdecken.
  12. Für 5 Minuten in der Mikrowelle erhitzen.
  13. Gut umrühren.
  14. Nochmals ein paar Stunden ziehen lassen.
  15. Sieb aus der Tasse entnehmen.
  16. Unter fließendem Wasser gut abspülen.
  17. Dabei mit Bürste gut in alle Ecken, damit die Chemie raus geht.
  18. In den Siebhalter einsetzen.
  19. Kaffe durchlassen.

Um es kurz zu machen: Danach hat alles wieder gut funktioniert. Ich hatte ganz zu Beginn schon mit einer Nadel das Sieb gut bearbeitet, hätte ich mir ggf. auch sparen können.

Wohl bekommt’s!

Handling WM_MOVING in Windows Forms

Just a quick snippet:

public class FormWithWmMoving :
    Form
{
    private const int WM_MOVING = 0x0216;

    private static readonly object EVENT_MOVING = new object();

    public event EventHandler Moving
    {
        add { Events.AddHandler(EVENT_MOVING, value); }
        remove { Events.RemoveHandler(EVENT_MOVING, value); }
    }

    public class MovingEventArgs : EventArgs
    {
        private readonly Rectangle _rectangle;

        public MovingEventArgs(
            Rectangle rectangle)
        {
            _rectangle = rectangle;
        }

        public Rectangle Rectangle
        {
            get { return _rectangle; }
        }
    }

    protected virtual void OnMoving(MovingEventArgs e)
    {
        var h = (EventHandler)Events[EVENT_MOVING];
        if (h != null)
        {
            h(this, e);
        }
    }

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_MOVING)
        {
            var r = (Win32NativeMethods.RECT)Marshal.PtrToStructure(m.LParam, typeof(Win32NativeMethods.RECT));
            var rectangle = new Rectangle(r.left, r.top, r.Bounds.Width, r.Bounds.Height);

            var args = new MovingEventArgs(rectangle);
            OnMoving(args);
        }

        base.WndProc(ref m);
    }
}

Hope this is helpful someday to me or others.

Die 10.000-Stunden-Regel

Gerade habe ich das Buch „Überflieger: Warum manche Menschen erfolgreich sind – und andere nicht“ zu Ende gelesen. Hochinteressanter Stoff!

Ein Abschnitt handelt von der sogenannten „10.000-Stunden-Regel„:

Jemand der erfolgreich in einer Sache ist, hat mindestens 10000 Stunden Übung in des entsprechende Thema investiert.

Das gilt scheinbar unabhängig von der Sache. Also sowohl für z.B. das Beherrschen eines Musikinstruments, als auch beispielsweise für Software-Entwickler.

Finde ich eine spannende These, die für mich einleuchtend und plausibel erscheint; deswegen muss sie nicht zwangsläufig auch richtig sein, viel Übung ist meiner Meinung nach immer sehr gut.

scriptpw.dll on Windows 2008 and Windows 7 („ScriptPW.Password“)

In Windows XP and Windows 2003 you could use

set oScriptPW = CreateObject(„ScriptPW.Password“)
strPassword = oScriptPW.GetPassword()

to read a password from a batch command script without printing it on the screen.

Unfortunately, the DLL that contains the „ScriptPW.Password“ object, scriptpw.dll, no longer exists on Windows 7 and Windows Server 2008.

As a workaround I developed a tiny C# .NET 2.0 Console application that mimics the behaviour of the „GetPassword“ function call. Following is the complete source of the application:

namespace scriptpw
{
    using System;

    class Program
    {
        static void Main()
        {
            var s = string.Empty;

            while (true)
            {
                var i = Console.ReadKey(true);
                if (i.Key == ConsoleKey.Enter)
                {
                    break;
                }
                else
                {
                    s += i.KeyChar;
                }
            }

            Console.Out.Write(s);
        }
    }
}

You can also directly download a compiled executable here.

As a small example usage in a batch command file (CMD), the following two lines read a password into the ‚Host1Password‘ variable:

<nul: SET /P Host1Password=Enter your password: 
for /f "delims=" %%i in ('scriptpw.exe') do set Host1Password=%%i
echo .

To be used later e.g.:

someapp --password %Host1Password%

Hope you like it! 🙂

Datenbanken zwischen 2 Oracle Express Editionen kopieren

Bei Microsoft SQL Server (Express) geht es ja relativ einfach, Datenbanken zwischen 2 Datenbank-Servern zu verschieben. Z.B.:

  1. Backup erstellen auf Server 1 und später auf Server 2 wiederherstellen. -oder-
  2. Datenbank auf Server 1 detachen (trennen), Dateien auf Server 2 kopieren und später auf Server 2 wieder attachen (anhängen).

Bei Oracle XE ist das auch möglich, allerdings ein bisschen aufwändiger und via Befehlszeile.

Rosenzuechter-sei-Dank weiß ich jetzt, wie das geht:

Exporting and Importing Data

Da ist es sehr ausführlich und Schritt-für-Schritt beschrieben.