Freigeben über


Benutzerdefinierte Steuerelemente

Mit .NET Framework ist es möglich, auf einfache Weise eigene Steuerelemente zu entwickeln. Sie können ein Benutzersteuerelement, das einen Satz von Standardsteuerelementen darstellt, die durch Code miteinander verbunden sind, erstellen oder ein eigenes Steuerelement von Grund auf neu erstellen. Sogar Vererbung kann verwendet werden, um ein Steuerelement zu erstellen, das von einem vorhandenen Steuerelement erbt, und um dessen inhärente Funktionalität zu verbessern. Welche Vorgehensweise auch gewählt wird, mit .NET Framework können Sie für jedes erstellte Steuerelement eine benutzerdefinierte grafische Oberfläche zeichnen.

Ein Steuerelement wird gezeichnet, indem Code in der OnPaint-Methode des Steuerelements ausgeführt wird. Bei dem einzigen Argument der OnPaint-Methode handelt es sich um ein PaintEventArgs-Objekt, das die gesamte Funktionalität und alle Informationen bietet, die zum Rendern des Steuerelements erforderlich sind. Von PaintEventArgs werden zwei Hauptobjekte, die beim Rendern des Steuerelements verwendet werden, als Eigenschaften bereitgestellt:

  • Das ClipRectangle-Objekt ist das Rechteck, das den Teil des Steuerelements darstellt, der gezeichnet wird. Dabei kann es sich um das gesamte Steuerelement oder einen Teil des Steuerelements handeln, je nachdem wie das Steuerelement gezeichnet wird.

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

Weitere Informationen über das Graphics-Objekt und dessen Verwendung finden Sie unter Gewusst wie: Erstellen von Graphics-Objekten zum Zeichnen.

Das OnPaint-Ereignis wird jedes Mal ausgelöst, wenn das Steuerelement auf dem Bildschirm gezeichnet oder aktualisiert wird. Das ClipRectangle-Objekt stellt das Rechteck dar, in dem der Zeichenvorgang ausgeführt wird. Wenn das gesamte Steuerelement aktualisiert werden muss, stellt ClipRectangle die Größe des gesamten Steuerelements dar. Wenn nur ein Teil des Steuerelements aktualisiert werden muss, stellt das ClipRectangle-Objekt jedoch lediglich den Bereich dar, der neu gezeichnet werden muss. Dies ist beispielsweise der Fall, wenn ein Steuerelement auf der Benutzeroberfläche teilweise von einem anderen Steuerelement oder Formular verdeckt wird.

Wenn von der Control-Klasse geerbt wird, muss die OnPaint-Methode so überschrieben werden, dass Code zum Rendern der Grafiken bereitgestellt wird. Wenn eine grafische Oberfläche für eine Benutzeroberfläche oder ein geerbtes Steuerelement bereitgestellt werden soll, kann dies ebenfalls durch Überschreiben der OnPaint-Methode erfolgen. Im Folgenden ein Beispiel:

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

   // Declare and instantiate a new pen.
   System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua);

   // Draw an aqua rectangle in the rectangle represented by the control.
   pe.Graphics.DrawRectangle(myPen, new Rectangle(this.Location, 
      this.Size));
}
protected   void OnPaint(PaintEventArgs pe)
{
   // Call the OnPaint method of the base class.
   super.OnPaint(pe);

   // Declare and instantiate a new pen.
   System.Drawing.Pen myPen =  new System.Drawing.Pen(Color.get_Aqua());

   // Draw an aqua rectangle in the ClipRectangle.
   pe.get_Graphics().DrawRectangle(myPen, pe.get_ClipRectangle());
}

Im voranstehenden Beispiel wird gezeigt, wie ein Steuerelement mit einer recht einfachen grafischen Darstellung gerendert wird. Die OnPaint-Methode der Basisklasse wird aufgerufen, ein Pen-Objekt wird erstellt, mit dem die Zeichnung ausgeführt wird, und in dem durch Location und Size des Steuerelements festgelegten Rechteck wird schließlich eine Ellipse gezeichnet. Auch wenn der Renderingcode meistens deutlich komplizierter ist als in diesem Beispiel, wird die Verwendung des im PaintEventArgs-Objekt enthaltenen Graphics-Objekts hier ausreichend veranschaulicht. Wenn von einer Klasse geerbt wird, die bereits über eine grafische Darstellung verfügt, z. B. UserControl oder Button, und diese Darstellung nicht in das Rendering einbezogen werden soll, darf die OnPaint-Methode der Basisklasse nicht aufgerufen werden.

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

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

Tipp

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

Siehe auch

Aufgaben

Gewusst wie: Erstellen von Graphics-Objekten zum Zeichnen

Referenz

Region

ControlStyles

Graphics

OnPaint

PaintEventArgs

Konzepte

Konstituierende Steuerelemente

Arten von benutzerdefinierten Steuerelementen