Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden benutzerdefinierte Steuerelemente vorgestellt und beschrieben, wie sie sich von Benutzersteuerelementen unterscheiden. Benutzerdefinierte Steuerelemente bieten keine visuelle Entwurfsoberfläche und verlassen sich auf vom Benutzer bereitgestellten Code, um sich selbst zu zeichnen. Dieses Design unterscheidet sich von Benutzersteuerelementen, die eine visuelle Entwurfsoberfläche bieten, um mehrere Steuerelemente in einer einzigen wiederverwendbaren Einheit zu gruppieren.
Verwenden Sie benutzerdefinierte Steuerelemente, wenn ein vorhandenes Steuerelement oder Benutzersteuerelement nicht in der Nähe der Ui oder Interaktivität liegt, die Sie benötigen. Sie erfordern mehr Aufwand, um sie vollständig zu implementieren. Windows Forms bietet weiterhin Tastatur- und Mausverarbeitung, sie müssen jedoch bestimmte Verhaltensweisen implementieren. Ein benutzerdefiniertes Steuerelement enthält keine Entwurfsoberfläche, da die gesamte Zeichnung über Code in der OnPaint Methode erfolgt. Sie können über die nichtvisuale Entwurfsoberfläche weiterhin Komponenten hinzufügen, z. B. eine TimerKomponente.
Basisklasse
Wählen Sie beim Erstellen eines benutzerdefinierten Steuerelements aus zwei Basisklassen aus:
-
Diese Basisklasse ist dieselbe, die von anderen Windows Forms-Steuerelementen verwendet wird. Sie steuern die Eingabe und Ausgabe des Steuerelements direkt.
System.Windows.Forms.ScrollableControl
Diese Basisklasse wird von einigen Windows Forms-Steuerelementen verwendet.
Controlwird erweitert, indem die Möglichkeit hinzugefügt wird, den Inhalt zu scrollen.
Wenn Sie den Inhalt des benutzerdefinierten Steuerelements nicht scrollen müssen, verwenden Sie Control als Basisklasse.
Geerbte Funktionen
Da die Basisklasse eines benutzerdefinierten Steuerelements lautet Control, erben Sie automatisch die Von allen Steuerelementen freigegebene Windows Forms-Funktionalität. Hier sind einige der Funktionen, die Sie mit einem benutzerdefinierten Steuerelement erhalten:
- Tastatur- und Mauseingabe.
- Layoutverhalten, z. B. Verankern und Andocken.
- Unterstützung für Tabulatoren.
- Minimale und maximale Größenbeschränkungen.
Gemälde
Das Zeichnen bedeutet, dass das Visuelle des Steuerelements gezeichnet wird. Sie erreichen diese Aufgabe, indem Sie die OnPaint Methode außer Kraft setzen. Weitere Informationen darüber, wie Steuerelemente malen, finden Sie unter Malen und Zeichnen auf Steuerelementen.
Wenn Sie ein benutzerdefiniertes Steuerelement mithilfe der Visual Studio-Vorlagen erstellen, überschreiben Sie die OnPaint Methode automatisch. Weil Sie den Code schreiben müssen, der Ihr Steuerelement zeichnet, geschieht dies durch die Vorlage. Hier ist ein Beispiel dafür, was die Vorlage generiert:
public partial class CustomControl1 : Control
{
public CustomControl1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
}
Public Class CustomControl1
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
'Add your custom paint code here
End Sub
End Class
Sie zeichnen ein benutzerdefiniertes Steuerelement mithilfe der OnPaint Methode. Diese Methode verwendet ein einzelnes Argument, ein PaintEventArgs Objekt, das alle Informationen und Funktionen bereitstellt, die Sie zum Rendern des Steuerelements benötigen.
PaintEventArgs stellt zwei Eigenschaften bereit, die Sie beim Rendern des Steuerelements verwenden:
PaintEventArgs.ClipRectangle– Stellt den Teil des Steuerelements dar, der neu gezeichnet werden muss. Dieser Teil kann das gesamte Steuerelement oder nur ein Abschnitt davon sein.
Graphics– Stellt die grafische Oberfläche des Steuerelements dar. Es stellt mehrere grafikorientierte Objekte und Methoden bereit, mit denen Sie die für das Zeichnen des Steuerelements erforderlichen Funktionen erhalten.
Die OnPaint Methode wird aufgerufen, wenn das Steuerelement auf dem Bildschirm gezeichnet oder aktualisiert wird, und das PaintEventArgs.ClipRectangle Objekt stellt das Rechteck dar, in dem das Zeichnen stattfindet. Wenn das gesamte Steuerelement aktualisiert werden muss, PaintEventArgs.ClipRectangle stellt die Größe des gesamten Steuerelements dar. Wenn nur ein Teil des Steuerelements aktualisiert werden muss, stellt es nur die Region dar, die neu gezeichnet werden muss. Ein Beispiel für einen solchen Fall wäre, dass wenn ein Steuerelement teilweise von einem anderen Steuerelement auf der Benutzeroberfläche verdeckt wird und das andere Steuerelement wegbewegt wird, der neu freigelegte Teil des darunter liegenden Steuerelements neu gezeichnet werden muss.
Der Code in der OnPaint-Methode eines Steuerelements wird ausgeführt, wenn das Steuerelement zum ersten Mal dargestellt wird und wann immer es ungültig gemacht wird. Um sicherzustellen, dass das Steuerelement bei jeder größenänderung neu gezeichnet wird, fügen Sie dem Konstruktor Ihres Steuerelements die folgende Zeile hinzu:
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.ResizeRedraw, True)
Beispiel
Der folgende Codeausschnitt ist ein benutzerdefiniertes Steuerelement, das mehrere farbige Rechtecke um den Rand des Steuerelements rendert.
protected override void OnPaint(PaintEventArgs pe)
{
Rectangle rect = this.ClientRectangle;
// Bring the width/height in by 1 pixel so the rectangle is drawn inside the control.
// Otherwise, it kind of overlaps the outside edge.
rect.Width -= 1;
rect.Height -= 1;
Pen[] colorPens = new Pen[] { Pens.Blue, Pens.BlueViolet,
Pens.AliceBlue, Pens.CornflowerBlue,
Pens.Cyan, Pens.DarkCyan };
foreach (Pen pen in colorPens)
{
pe.Graphics.DrawRectangle(pen, rect);
rect.Inflate(-1, -1);
}
// Raise the Paint event so users can custom paint if they want.
base.OnPaint(pe);
}
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim rect As Rectangle = Me.ClientRectangle
'Bring the width/height in by 1 pixel so the rectangle is drawn inside the control.
'Otherwise, it kind of overlaps the outside edge.
rect.Width -= 1
rect.Height -= 1
Dim colorPens As Pen() = {Pens.Blue, Pens.BlueViolet,
Pens.AliceBlue, Pens.CornflowerBlue,
Pens.Cyan, Pens.DarkCyan}
For Each curPen As Pen In colorPens
e.Graphics.DrawRectangle(curPen, rect)
rect.Inflate(-1, -1)
Next
'Raise the Paint event so users can custom paint if they want.
MyBase.OnPaint(e)
End Sub
Der vorangehende Code erstellt ein Steuerelement, das wie die folgende Abbildung aussieht:
Hintergrund
Beachten Sie, dass der Hintergrund des Steuerelements mit der SystemColors.Control Farbe gezeichnet wird, auch wenn der OnPaint Code das Steuerelement nicht mit einer Farbe löscht oder ausfüllt. Die OnPaintBackground(PaintEventArgs) Methode zeichnet den Hintergrund vor dem Aufrufen von OnPaint. Überschreiben Sie OnPaintBackground, um das Zeichnen des Hintergrunds Ihres Steuerelements zu behandeln. Die Standardimplementierung dieser Methode zeichnet die durch die Eigenschaften BackColor und BackgroundImage festgelegte Farbe und das Bild.
Verwandte Inhalte
.NET Desktop feedback