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 maakt u kennis met aangepaste besturingselementen en wordt beschreven hoe deze verschillen van gebruikersbesturingselementen. Aangepaste bedieningselementen bieden geen visueel ontwerpoppervlak en zijn afhankelijk van door de gebruiker geleverde code om zichzelf weer te geven. Dit verschilt van gebruikersbesturingselementen die een visueel ontwerpoppervlak bieden om meerdere besturingselementen in één herbruikbare eenheid te groeperen.
Aangepaste besturingselementen worden gebruikt wanneer een bestaand besturingselement of gebruikersbesturingselement niet in de buurt komt van de gebruikersinterface of interactiviteit die u nodig hebt. Ze vereisen meer inspanning voor uw kant om volledig te implementeren. Toetsenbord- en muisafhandeling wordt nog steeds geleverd door Windows Forms, maar elk gedrag wordt aan u overgelaten om te implementeren. Er is geen ontwerpoppervlak met een aangepast besturingselement, omdat alle tekening wordt uitgevoerd via code in de OnPaint methode. Onderdelen, zoals een Timer, kunnen nog steeds worden toegevoegd via het niet-visuele ontwerpoppervlak.
Basisklasse
Er zijn twee basisklassen waaruit u kunt kiezen bij het maken van een aangepast besturingselement:
-
Dit is dezelfde basisklasse die wordt gebruikt door andere Besturingselementen voor Windows Forms. U bepaalt de invoer en uitvoer van het besturingselement rechtstreeks.
System.Windows.Forms.ScrollableControl
Sommige Besturingselementen voor Windows Forms gebruiken deze basisklasse. Deze klasse breidt zich uit
Controldoor de mogelijkheid toe te voegen om door de inhoud te schuiven.
Tenzij u de inhoud van het aangepaste besturingselement moet schuiven, gebruikt u Control als basisklasse.
Overgenomen mogelijkheden
Omdat de basisklasse van een aangepast bedieningselement Control is, erft u automatisch de functionaliteit van Windows Forms die wordt gedeeld door alle bedieningselementen. Hier volgen enkele van de mogelijkheden die u krijgt met een aangepast besturingselement:
- Toetsenbord- en muisinvoer.
- Indelingsgedrag, zoals verankering en docking.
- Ondersteuning voor tabbladen.
- Beperkingen voor minimale en maximale grootte.
Schilderij
Schilderen, wat betekent dat je de visuele weergave van het besturingselement tekent, wordt bewerkstelligd door de OnPaint-methode te overschrijven. Zie Schilderen en tekenen op besturingselementen voor meer informatie over hoe besturingselementen schilderen.
Wanneer u een aangepast besturingselement maakt met behulp van de Visual Studio-sjablonen, wordt de OnPaint methode voor u automatisch overschreven. De sjabloon doet dit omdat u de code moet schrijven om uw controle weer te geven. Hier volgt een voorbeeld van wat de sjabloon genereert:
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
Een aangepast besturingselement wordt met de OnPaint methode geschilderd. Het enige argument van deze methode is een PaintEventArgs object, dat alle informatie en functionaliteit biedt die nodig zijn om uw besturingselement weer te geven.
PaintEventArgs biedt twee eigenschappen die worden gebruikt bij het weergeven van uw controle-element:
PaintEventArgs.ClipRectangle— Vertegenwoordigt het deel van het besturingselement dat opnieuw moet worden getekend. Dit kan de volledige controle of een deel van de controle zijn.
Graphics— Vertegenwoordigt het grafische oppervlak van uw bedieningselement. Het biedt verschillende grafische objecten en methoden die de functionaliteit bieden die nodig is om uw controle te tekenen.
De OnPaint methode wordt aangeroepen telkens wanneer het besturingselement op het scherm wordt getekend of bijgewerkt, en het PaintEventArgs.ClipRectangle object vertegenwoordigt de rechthoek waarin het schilderen plaatsvindt. Als het volledige besturingselement moet worden vernieuwd, vertegenwoordigt PaintEventArgs.ClipRectangle de grootte van het hele besturingselement. Als slechts een deel van het besturingselement moet worden vernieuwd, vertegenwoordigt het alleen het gebied dat opnieuw moet worden bijgewerkt. Een voorbeeld van een dergelijk geval is wanneer een besturingselement gedeeltelijk wordt verborgen door een ander besturingselement in de gebruikersinterface en dat andere besturingselement wordt verwijderd, moet het onlangs blootgelegde deel van het onderliggende besturingselement opnieuw worden getekend.
De code in de OnPaint methode van een besturingscontrole wordt uitgevoerd wanneer de controle voor het eerst wordt getekend en telkens wanneer deze geïnvalideerd wordt. Voeg de volgende regel toe aan de constructor van uw besturingselement om ervoor te zorgen dat het besturingselement telkens wanneer het formaat wordt gewijzigd, opnieuw wordt getekend:
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.ResizeRedraw, True)
Voorbeeld
Het volgende codefragment is een aangepaste controle die meerdere gekleurde rechthoeken langs de rand van de controle weergeeft.
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
De vorige code maakt een controle die eruitziet als de volgende afbeelding:
Achtergrond
U ziet dat de achtergrond van het besturingselement is geschilderd met de SystemColors.Control kleur, ook al wordt het OnPaint besturingselement niet gewist of gevuld met een kleur. De achtergrond wordt eigenlijk geschilderd door de OnPaintBackground(PaintEventArgs) methode voordat OnPaint wordt aangeroepen. Overschrijf OnPaintBackground om het tekenen van de achtergrond van uw controlelement af te handelen. De standaard implementatie van deze methode is om respectievelijk de kleur en afbeelding te tekenen die door de BackColor en BackgroundImage eigenschappen zijn ingesteld.
Verwante inhoud
.NET Desktop feedback