Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leert u hoe u een eigen Windows Forms-besturingselement te maken. Het eenvoudige besturingselement dat in dit artikel is ontwikkeld, drukt de Text besturingselementen links, midden of rechts van het besturingselement af. De uitlijning van de tekst kan worden gewijzigd. Met dit besturingselement worden gebeurtenissen niet gegenereerd of verwerkt.
In dit artikel leert u het volgende:
- Voeg een eigenschap en veld toe om de horizontale uitlijningsinstelling van de tekst te verwerken.
- Gebruik
OnTextChangedom het besturingselement te invalideren. - Geef code op in de
OnPaintmethode om tekst op het oppervlak van het besturingselement te tekenen.
Een aangepaste controle toevoegen
De eerste stap is het toevoegen van een aangepast besturingselement aan uw project.
Zoek in Visual Studio het Solution Explorer-venster . Klik met de rechtermuisknop op het project en kiesNieuw item>.
Zoek naar Aangepast besturingselement en selecteer het.
Stel de bestandsnaam in op FirstControl en selecteer Toevoegen.
Als de ontwerpmodus van het besturingselement zichtbaar is, schakelt u over naar de codeweergave. Druk op F7 of selecteer de koppeling naar de codeweergave .
Aanbeveling
U kunt ook met de rechtermuisknop op het bestand klikken in het Solution Explorer-venster en Code weergeven selecteren.
U moet nu de broncode voor het aangepaste besturingselement bekijken. Dit ziet er ongeveer als volgt uit:
public partial class FirstControl : Control
{
public FirstControl()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
}
Public Class FirstControl
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
'Add your custom paint code here
End Sub
End Class
Een eigenschap toevoegen
Maak een nieuwe eigenschap op het besturingselement met de naam TextAlignment. Met deze eigenschap wordt aangepast waar de tekst op het besturingselement wordt weergegeven. Voer met de FirstControl klasse de volgende stappen uit:
Voeg een veld toe met de naam
_textAlignmentvan het typeHorizontalAlignment.private HorizontalAlignment _textAlignment = HorizontalAlignment.Left;Private _textAlignment As HorizontalAlignment = HorizontalAlignment.LeftHet veld inpakken in een eigenschap met de naam
TextAlignment. Wanneer u de eigenschap instelt, roept u deInvalidatemethode aan om af te dwingen dat het besturingselement zichzelf opnieuw tekent.public HorizontalAlignment TextAlignment { get => _textAlignment; set { _textAlignment = value; Invalidate(); } }Public Property TextAlignment As HorizontalAlignment Get Return _textAlignment End Get Set(value As HorizontalAlignment) _textAlignment = value Invalidate() End Set End PropertyVoeg de volgende kenmerken toe aan de eigenschap om deze te integreren met het venster Eigenschappen in Visual Studio.
Category— De categorie die is toegepast op de eigenschap.Description— De beschrijving van de eigenschap.DefaultValue— Een standaardwaarde voor de eigenschap.Met de standaardwaarde kan de eigenschap opnieuw worden ingesteld door de ontwerper. Het helpt ook bij het bepalen wanneer de eigenschap moet worden geserialiseerd naar de achterliggende code, aangezien standaardwaarden niet worden geserialiseerd.
[System.ComponentModel.Category("Alignment"), System.ComponentModel.Description("Specifies the alignment of text."), System.ComponentModel.DefaultValue(HorizontalAlignment.Left)] public HorizontalAlignment TextAlignment<System.ComponentModel.Category("Alignment"), System.ComponentModel.Description("Specifies the alignment of text."), System.ComponentModel.DefaultValue(HorizontalAlignment.Left)> Public Property TextAlignment As HorizontalAlignment
Verwerkte tekst wijzigen
De TextAlignment eigenschap roept Invalidate op zodat het besturingselement zichzelf opnieuw tekent. Dit zorgt ervoor dat de juiste uitlijning direct wordt gebruikt bij het weergeven van het Text besturingselement. Als de Text eigenschap echter wordt gewijzigd, wordt er niets bijgewerkt omdat TextInvalidate deze niet aanroept. De eigenschap roept de OnTextChanged-methode aan, die u kunt overschrijven om Invalidate aan te roepen en het besturingselement te dwingen zichzelf opnieuw te tekenen.
Voer met de FirstControl klasse de volgende stappen uit:
- Overschrijf de methode
OnTextChanged. - Roep
base.OnTextChangedop om deTextChangedgebeurtenis te genereren, zoals verwacht door de gebruikers van het besturingselement. - Roep de
Invalidatemethode aan om opnieuw te schilderen.
Uw code moet eruitzien als het volgende codefragment:
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
Invalidate();
}
Protected Overrides Sub OnTextChanged(e As EventArgs)
MyBase.OnTextChanged(e)
Invalidate()
End Sub
Het besturingselement schilderen
Het laatste deel van de aangepaste besturing is schilderen. Voer met de FirstControl klasse de volgende stappen uit:
Zoek de
OnPaintmethode die door de sjabloon is gegenereerd. Als deze ontbreekt, overschrijft u deze uit de basisklasse.Maak een nieuwe
StringFormatvariabele met de naamstyle.StringFormat style = new();Dim style As New StringFormatHet System.Drawing.StringFormat type bevat informatie over de tekstindeling en biedt toegang tot uitlijning.
Stel op basis van
TextAlignmentde eigenschapstyle.Alignmentin op de juiste waarde.style.Alignment = TextAlignment switch { // Map the HorizontalAlignment enum to the StringAlignment enum HorizontalAlignment.Left => StringAlignment.Near, HorizontalAlignment.Right => StringAlignment.Far, HorizontalAlignment.Center => StringAlignment.Center, // Default to Near alignment _ => StringAlignment.Near };'Map the HorizontalAlignment enum to the StringAlignment enum Select Case TextAlignment Case HorizontalAlignment.Left style.Alignment = StringAlignment.Near Case HorizontalAlignment.Right style.Alignment = StringAlignment.Far Case HorizontalAlignment.Center style.Alignment = StringAlignment.Center End SelectTeken de
Texteigenschap metGraphics.DrawString.// Create the brush and automatically dispose it. using SolidBrush foreBrush = new(ForeColor); // Call the DrawString method to write text. // Text, Font, and ClientRectangle are inherited properties. pe.Graphics.DrawString(Text, Font, foreBrush, ClientRectangle, style);'Create the brush and automatically dispose it. Using foreBrush As New SolidBrush(ForeColor) 'Call the DrawString method to write text. 'Text, Font, and ClientRectangle are inherited properties. e.Graphics.DrawString(Text, Font, foreBrush, ClientRectangle, style) End UsingBelangrijk
De
Graphics.DrawStringmethode gebruikt eenBrushvoor de kleur van de tekst.Brushesmoet na gebruik worden verwijderd.De Graphics.DrawString methode maakt gebruik van tekst, een lettertype, kleur en opmaakopties om een tekenreeks te tekenen.
Roep
base.OnPaintop om ervoor te zorgen dat dePaintgebeurtenis wordt getriggerd.base.OnPaint(pe);MyBase.OnPaint(e)Sla het codebestand op en compileer het project. Nadat het project is gecompileerd, voegt Visual Studio het aangepaste besturingselement toe aan de Werkset wanneer u de Visuele Ontwerper opent.
Uw code moet eruitzien als het volgende codefragment:
public partial class FirstControl : Control
{
private HorizontalAlignment _textAlignment = HorizontalAlignment.Left;
[System.ComponentModel.Category("Alignment"),
System.ComponentModel.Description("Specifies the alignment of text."),
System.ComponentModel.DefaultValue(HorizontalAlignment.Left)]
public HorizontalAlignment TextAlignment
{
get => _textAlignment;
set
{
_textAlignment = value;
Invalidate();
}
}
public FirstControl()
{
InitializeComponent();
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
Invalidate();
}
protected override void OnPaint(PaintEventArgs pe)
{
StringFormat style = new();
style.Alignment = TextAlignment switch
{
// Map the HorizontalAlignment enum to the StringAlignment enum
HorizontalAlignment.Left => StringAlignment.Near,
HorizontalAlignment.Right => StringAlignment.Far,
HorizontalAlignment.Center => StringAlignment.Center,
// Default to Near alignment
_ => StringAlignment.Near
};
// Create the brush and automatically dispose it.
using SolidBrush foreBrush = new(ForeColor);
// Call the DrawString method to write text.
// Text, Font, and ClientRectangle are inherited properties.
pe.Graphics.DrawString(Text, Font, foreBrush, ClientRectangle, style);
base.OnPaint(pe);
}
}
Public Class FirstControl
Private _textAlignment As HorizontalAlignment = HorizontalAlignment.Left
<System.ComponentModel.Category("Alignment"),
System.ComponentModel.Description("Specifies the alignment of text."),
System.ComponentModel.DefaultValue(HorizontalAlignment.Left)>
Public Property TextAlignment As HorizontalAlignment
Get
Return _textAlignment
End Get
Set(value As HorizontalAlignment)
_textAlignment = value
Invalidate()
End Set
End Property
Protected Overrides Sub OnTextChanged(e As EventArgs)
MyBase.OnTextChanged(e)
Invalidate()
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim style As New StringFormat
'Map the HorizontalAlignment enum to the StringAlignment enum
Select Case TextAlignment
Case HorizontalAlignment.Left
style.Alignment = StringAlignment.Near
Case HorizontalAlignment.Right
style.Alignment = StringAlignment.Far
Case HorizontalAlignment.Center
style.Alignment = StringAlignment.Center
End Select
'Create the brush and automatically dispose it.
Using foreBrush As New SolidBrush(ForeColor)
'Call the DrawString method to write text.
'Text, Font, and ClientRectangle are inherited properties.
e.Graphics.DrawString(Text, Font, foreBrush, ClientRectangle, style)
End Using
MyBase.OnPaint(e)
End Sub
End Class
Verwante inhoud
.NET Desktop feedback