Donnerstag, Mai 05, 2005

Visual Designer von Visual Studio.NET

Ich hatte dieses Problem schon mal, hab es gelöst, hab mir aber nicht notiert, wie...

Das tue ich hiermit: Beim Erben eines Windows.Form-Objekts kam im Designer immer die Fehlermeldung NullReferenceException oder ähnliche. Dies liegt daran, dass im Basis-Form in einem Event oder einer überschriebenen Methode ein Objekt angesprochen wird, das für den Designer noch nicht deklariert ist. Beispiel:

Public Class BaseForm
Inherits Windows.Forms.Form

#Region "Windows Form Designer generated code "
' ...
#End Region

Private obj as Object

'Ein weiterer Konstruktor, der das Objekt erst initialisiert
Public Sub New(ByVal parameter as Object)
Me.New()

obj = New Object()
End Sub

Protected Overrides Sub OnVisibleChanged(ByVal e As System.EventArgs)
MyBase.OnVisibleChanged(e)

obj.MethodCall()
End Sub
End Class

Wird von diesem Form geerbt, dann wird OnVisibleChanged aufgerufen, sobald der Designer geöffnet wird, was zur Folge hat, dass der Aufruf für das nicht initialisierte Objekt obj zu einer NullReferenceException führt. Natürlich gibt es auch das Problem beim entsprechenden Event. Weitere momentan mir bekannte Events bzw. überschreibbare Methoden, die zu diesen Problemen führen, sind Load bzw. OnLoad.

Gelöst werden kann das ganze einfach durch ein einschließen des problematischen Codeblocks mit folgender Bedingung:

If Not Me.DesignMode Then
obj.MethodCall()
End If