Freigeben über


User-Drawn-Steuerelemente

Das .NET Framework bietet Ihnen die Möglichkeit, ihre eigenen Steuerelemente einfach zu entwickeln. Sie können ein Benutzersteuerelement erstellen, bei dem es sich um eine Reihe von Standardsteuerelementen handelt, die durch Code gebunden sind, oder Sie können ihr eigenes Steuerelement von Grund auf entwerfen. Sie können sogar die Vererbung verwenden, um ein Steuerelement zu erstellen, das von einem vorhandenen Steuerelement erbt und seine inhärente Funktionalität erweitert. Unabhängig davon, welche Vorgehensweise Sie verwenden, bietet .NET Framework die Funktionalität zum Zeichnen einer benutzerdefinierten grafischen Benutzeroberfläche für jedes von Ihnen erstellte Steuerelement.

Das Zeichnen eines Steuerelements erfolgt durch die Ausführung von Code in der OnPaint-Methode des Steuerelements. Das einzelne Argument der OnPaint-Methode ist ein PaintEventArgs-Objekt, das alle Informationen und Funktionen bereitstellt, die zum Rendern Ihrer Steuerung erforderlich sind. Die PaintEventArgs stellt als Eigenschaften zwei Prinzipalobjekte bereit, die beim Rendern des 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 erforderlichen Funktionen bereitstellen.

Weitere Informationen zum Graphics-Objekt und dessen Verwendung finden Sie unter Anleitungen zur Erstellung von Grafikobjekten zum Zeichnen.

Das OnPaint-Ereignis wird ausgelöst, wenn das Steuerelement auf dem Bildschirm gezeichnet oder aktualisiert wird, und das ClipRectangle-Objekt stellt das Rechteck dar, in dem das Zeichnen stattfindet. Wenn das gesamte Steuerelement aktualisiert werden muss, stellt das ClipRectangle die Größe des gesamten Steuerelements dar. Wenn nur ein Teil des Steuerelements aktualisiert werden muss, stellt das ClipRectangle-Objekt jedoch nur den Bereich dar, der 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 wurde.

Wenn Sie von der Control-Klasse erben, müssen Sie die OnPaint-Methode überschreiben und Grafikrendering-Code implementieren. Wenn Sie einem Benutzersteuerelement oder einem geerbten Steuerelement eine benutzerdefinierte grafische Benutzeroberfläche bereitstellen möchten, können Sie dies auch durch Überschreiben der OnPaint-Methode tun. Nachfolgend sehen Sie ein Beispiel:

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. Sie ruft die OnPaint-Methode der Basis-Klasse auf, erstellt ein Pen-Objekt, mit dem gezeichnet wird, und zeichnet schließlich eine Ellipse im Rechteck, welches durch die Location und Size des Steuerelements bestimmt wird. Obwohl die meisten Rendering-Codes wesentlich komplizierter sind, veranschaulicht dieses Beispiel die Verwendung des Graphics-Objekts, das im PaintEventArgs-Objekt enthalten ist. Beachten Sie, dass Sie, wenn Sie von einer Klasse erben, die bereits über eine grafische Darstellung verfügt, wie UserControl oder Button, und Sie diese Darstellung nicht in das Rendering integrieren möchten, sollten Sie die Methode OnPaint der Basisklasse nicht aufrufen.

Der Code in der OnPaint-Methode des Steuerelements wird ausgeführt, wenn das Steuerelement zum ersten Mal gezeichnet wird und wann immer es aktualisiert wird. Um sicherzustellen, dass das Steuerelement bei jeder Größenänderung neu gezeichnet wird, fügen Sie dem Konstruktor des Steuerelements die folgende Zeile hinzu:

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

Anmerkung

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

Siehe auch