Contrôles dessinés par l'utilisateur
Avec le .NET Framework, vous pouvez très facilement développer vos propres contrôles. Vous pouvez créer un contrôle utilisateur, c'est-à-dire des contrôles standard liés ensemble par du code, ou créer votre propre contrôle en partant de zéro. Vous pouvez même utiliser l'héritage pour créer un contrôle héritant d'un contrôle existant et compléter ses fonctionnalités inhérentes. Quelle que soit la méthode choisie, le .NET Framework met à votre disposition les fonctionnalités qui vous permettront de dessiner une interface graphique personnalisée pour tout contrôle que vous créerez.
Pour peindre un contrôle, vous exécutez le code de sa méthode OnPaint. L'unique argument de la méthode OnPaint est un objet PaintEventArgs qui fournit toutes les informations et toutes les fonctionnalités nécessaires au rendu de votre contrôle. PaintEventArgs fournit sous forme de propriétés deux objets principaux à utiliser pour le rendu de votre contrôle :
Objet ClipRectangle : le rectangle qui représente la partie du contrôle qui sera dessinée. Il peut s'agir du contrôle entier ou d'une partie du contrôle, selon la façon dont celui-ci est dessiné.
Objet Graphics : encapsule plusieurs méthodes et objets graphiques fournissant les fonctionnalités qui vous sont nécessaires pour dessiner le contrôle.
Pour plus d'informations sur l'objet Graphics et son utilisation, consultez Comment : créer des objets graphiques pour le dessin.
L'événement OnPaint est déclenché chaque fois que le contrôle est dessiné ou actualisé à l'écran, et l'objet ClipRectangle représente le rectangle dans lequel le dessin est effectué. Si le contrôle entier doit être actualisé, ClipRectangle représente la taille du contrôle entier. En revanche, si seulement une partie du contrôle doit être actualisée, l'objet ClipRectangle représente uniquement la région qui doit être redessinée. Un tel cas peut, par exemple, se produire lorsqu'un contrôle était partiellement caché par un autre contrôle ou formulaire dans l'interface utilisateur.
Lorsque vous héritez de la classe Control, vous devez substituer le contenu de la méthode OnPaint par votre propre code de rendu graphique. Si vous voulez fournir une interface graphique personnalisée à un contrôle utilisateur ou hérité, vous pouvez également le faire en substituant la méthode OnPaint. Voici un exemple :
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());
}
L'exemple précédent montre comment définir pour un contrôle une représentation graphique très simple. Il appelle la méthode OnPaint de la classe de base, crée un objet Pen utilisé pour dessiner, puis dessine une ellipse dans le rectangle déterminé par les paramètres Location et Size du contrôle. Même si, en général, le code de rendu est sensiblement plus complexe que celui-ci, cet exemple montre comment utiliser l'objet Graphics contenu dans l'objet PaintEventArgs. Notez que si vous héritez d'une classe telle que UserControl ou Button possédant déjà une représentation graphique que vous ne voulez pas insérer dans votre rendu, vous ne devez pas appeler la méthode OnPaint de votre classe de base.
Le code de la méthode OnPaint s'exécute lorsque le contrôle est dessiné, puis chaque fois qu'il est actualisé. Pour être sûr que votre contrôle sera redessiné chaque fois qu'il sera redimensionné, ajoutez la ligne suivante à son constructeur :
SetStyle(ControlStyles.ResizeRedraw, True)
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.ResizeRedraw, true);
Notes
Utilisez la propriété Control.Region pour implémenter un contrôle non rectangulaire.
Voir aussi
Tâches
Comment : créer des objets graphiques pour le dessin