Windows Forms-Umrisse frei bestimmen

Veröffentlicht: 12. Apr 2004 | Aktualisiert: 29. Jun 2004

Von Mathias Schiffer

Windows Forms müssen nicht immer langweilig rechteckig sein. Mithilfe von Regionen können Sie die Gestaltung völlig frei bestimmen. Dieser MSDN Quickie zeigt, wie einfach das geht.

Windows Forms besitzen eine Region-Eigenschaft, mit deren Hilfe Sie den Umriss und die Gestalt der erscheinenden Form frei festlegen können. Eine Region ist dabei eine Form- und Flächenbestimmung, die sich aus diversen grafischen Operationen erstellen lässt.

So können Sie nicht nur unregelmäßige Umrisse für Windows Forms erzeugen. Auch Aussparungen in Forms, die wie durch Löcher auf den Untergrund des Fensters blicken lassen, sind möglich.

Zunächst legt man dazu einen Grafikpfad aus Drawing2D.GraphicsPath an, der die verschiedenen Formen und ihre Kombinationsregeln aufnimmt. Aus diesem Pfad lässt sich später eine Region erstellen, die der Form zugewiesen werden kann.

Beginnen wir mit einem einfachen Beispiel, das die Kombination der grafischen Operationen zu Pfaden und abschließend zu einer Region darstellt: Eine Form soll beispielsweise aussehen wie ein Bekleidungsknopf, d.h. die Form soll kreisrund sein und vier Löcher haben, durch die ein Faden zum Annähen führen würde.

Der folgende Code erstellt eine solche Form:

Private Sub Form1_Load(ByVal sender As System.Object, _ 
  ByVal e As System.EventArgs _ 
  ) Handles MyBase.Load 
  ' Objekt für den Grafikpfad bereitstellen 
  Dim objPath As New Drawing2D.GraphicsPath 
  ' Außenmaße des Kreises der Form anpassen 
  Dim objDiameter As Integer = Me.ClientSize.Height 
  Dim objRadius As Integer = objDiameter / 2 
  ' Den Außenkreis anlegen 
  objPath.AddEllipse(0, 0, objDiameter, objDiameter) 
  ' Obere Nählöcher (erst links, dann rechts) 
  objPath.AddEllipse(objRadius - 25, objRadius - 25, 20, 20) 
  objPath.AddEllipse(objRadius + 5, objRadius - 25, 20, 20) 
  ' Untere Nählöcher (erst links, dann rechts) 
  objPath.AddEllipse(objRadius - 25, objRadius + 5, 20, 20) 
  objPath.AddEllipse(objRadius + 5, objRadius + 5, 20, 20) 
  ' Aus dem Pfad eine Region erzeugen und diese der Form zuweisen 
  Me.Region = New Region(objPath) 
End Sub

IrregForms_01.gif

Abbildung 1: Aus der rechteckigen Form wurde ein "Knopf"

Doch auch weitere Anwendungsbeispiele sind denkbar. Die Verwendung von GraphicsPath macht es über die AddString-Methode sehr einfach, beispielsweise die Umrisse eines Schriftzugs als Formrand zu verwenden. Auch hier wieder ein Beispiel:

Private Sub Form1_Load(ByVal sender As System.Object, _ 
  ByVal e As System.EventArgs _ 
  ) Handles MyBase.Load 
  ' Objekt für den Grafikpfad bereitstellen 
  Dim objPath As New Drawing2D.GraphicsPath 
  ' "MSDN Quickie" zweizeilig als Pfad verwenden 
  objPath.AddString("MSDN" & vbNewLine & "Quickie", _ 
  Me.Font.FontFamily, Font.Bold, _ 
  80, New Point(0, 0), _ 
  StringFormat.GenericDefault) 
  ' Aus dem Pfad eine Region erzeugen und diese der Form zuweisen 
  Me.Region = New Region(objPath) 
End Sub

Bb979335.irregforms_02(de-de,MSDN.10).gif

Abbildung 2: Mal etwas anderes - eine Form aus Schriftlinien

Wie Sie sehen, können Sie mit den Grafik-Methoden von GraphicsPath auf einfache Weise individuelle Konturen und Gebilde erstellen können. Durch die einfache Zuweisung einer daraus erzeugten Region an die Region-Eigenschaft einer Windows Form übernimmt diese den Grafikpfad als Gestalt.

Sie beenden den Zauber, indem Sie die Region-Eigenschaft der Form wieder entleeren:

Me.Region = Nothing