Benutzerdefinierte Steuerelemente

Das .NET Framework bietet Ihnen die Möglichkeit, auf einfache Weise Ihre eigenen Steuerelemente zu entwickeln. Sie können ein Benutzersteuerelement erstellen, bei dem es sich um eine Reihe von Standardsteuerelementen handelt, die durch Code miteinander verbunden sind, oder Sie können Ihr eigenes Steuerelement von Grund auf neu entwerfen. Sie können sogar die Vererbung verwenden, um ein Steuerelement zu erstellen, das von einem vorhandenen Steuerelement erbt und dessen inhärente Funktionalität erweitert. Unabhängig davon, welchen Ansatz Sie wählen, bietet das .NET Framework die Funktionalität, eine benutzerdefinierte grafische Oberfläche für jedes von Ihnen erstellte Steuerelement zu zeichnen.

Das Zeichnen eines Steuerelements wird durch die Ausführung von Code in der OnPaint-Methode des Steuerelements erreicht. Das einzige Argument der OnPaint-Methode ist ein PaintEventArgs-Objekt, das alle zum Rendern Ihres Steuerelements erforderlichen Informationen und Funktionen enthält. Die PaintEventArgs-Instanz bietet als Eigenschaften zwei Prinzipalobjekte, die beim Rendern Ihres Steuerelements verwendet werden:

  • ClipRectangle-Objekt – Das Rechteck, das den Teil des Steuerelements darstellt, der gezeichnet werden soll. Dies kann das gesamte Steuerelement oder ein Teil des Steuerelements sein, je nachdem, wie das Steuerelement gezeichnet wird.

  • Graphics-Objekt – Kapselt mehrere grafikorientierte Objekte und Methoden, die die zum Zeichnen des Steuerelements erforderliche Funktionalität bieten.

Weitere Informationen zum Graphics-Objekt und seiner Verwendung finden Sie unter Vorgehensweise: Erstellen von Grafikobjekten zum Zeichnen.

Das OnPaint-Ereignis wird immer dann ausgelöst, wenn das Steuerelement auf dem Bildschirm gezeichnet oder aktualisiert wird, und das ClipRectangle-Objekt das Rechteck darstellt, in dem das Zeichnen stattfinden wird. Wenn das gesamte Steuerelement aktualisiert werden muss, entspricht ClipRectangle der Größe des gesamten Steuerelements. Wenn nur ein Teil des Steuerelements aktualisiert werden muss, stellt das ClipRectangle-Objekt jedoch nur die Region dar, die neu gezeichnet werden muss. Ein Beispiel für einen solchen Fall wäre, wenn ein Steuerelement teilweise von einem anderen Steuerelement oder Formular auf der Benutzeroberfläche verdeckt wird.

Beim Erben von der Control-Klasse müssen Sie die OnPaint-Methode außer Kraft setzen und Code für das Rendern von Grafiken bereitstellen. Wenn Sie eine benutzerdefinierte grafische Schnittstelle für ein Benutzersteuerelement oder ein geerbtes Steuerelement bereitstellen möchten, können Sie dies auch erreichen, indem Sie die OnPaint-Methode außer Kraft setzen. Unten ist ein Beispiel angegeben:

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)  
   ' Call the OnPaint method of the base class.  
   MyBase.OnPaint(e)  
  
   ' Declare and instantiate a drawing pen.  
   Using myPen As System.Drawing.Pen = New System.Drawing.Pen(Color.Aqua)  
      ' Draw an aqua rectangle in the rectangle represented by the control.  
      e.Graphics.DrawRectangle(myPen, New Rectangle(Me.Location, Me.Size))  
   End Using
End Sub  
protected override void OnPaint(PaintEventArgs e)  
{  
   // Call the OnPaint method of the base class.  
   base.OnPaint(e);  
  
   // Declare and instantiate a new pen.  
   using (System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua))  
   {
      // Draw an aqua rectangle in the rectangle represented by the control.  
      e.Graphics.DrawRectangle(myPen, new Rectangle(this.Location,
         this.Size));  
   }
}  

Im vorherigen Beispiel wird veranschaulicht, wie ein Steuerelement mit einer sehr einfachen grafischen Darstellung gerendert wird. Es ruft die OnPaint-Methode der Basisklasse auf, erstellt ein Pen-Objekt, mit dem gezeichnet werden soll, und zeichnet schließlich eine Ellipse im Rechteck, das durch die Location- und Size-Instanz des Steuerelements bestimmt wird. Obwohl der meiste Renderingcode wesentlich komplizierter sein wird, veranschaulicht dieses Beispiel die Verwendung des Graphics-Objekts, das im PaintEventArgs-Objekt enthalten ist. Beachten Sie, dass Sie die OnPaint-Methode Ihrer Basisklasse nicht aufrufen sollten, wenn Sie von einer Klasse erben, die bereits über eine grafische Darstellung verfügt, z. B. UserControl oder Button, und Sie diese Darstellung nicht in Ihr Rendering einbeziehen möchten.

Der Code in der OnPaint-Methode Ihres Steuerelements wird ausgeführt, wenn das Steuerelement erstmalig gezeichnet wird, und bei jeder Aktualisierung. Damit Ihr Steuerelement bei jeder Größenanpassung neu gezeichnet wird, fügen Sie die folgende Zeile im Konstruktor Ihres Steuerelements hinzu:

SetStyle(ControlStyles.ResizeRedraw, True)  
SetStyle(ControlStyles.ResizeRedraw, true);  

Hinweis

Verwenden Sie die Control.Region-Eigenschaft, um ein nicht rechteckiges Steuerelement zu implementieren.

Weitere Informationen