Contrôles dessinés par l'utilisateur

Le .NET Framework vous offre la possibilité de développer facilement vos propres contrôles. Vous pouvez créer un contrôle utilisateur, qui est un ensemble de contrôles standard liés par code, ou vous pouvez concevoir votre propre contrôle à partir du terrain. Vous pouvez même utiliser l’héritage pour créer un contrôle qui hérite d’un contrôle existant et ajouter à ses fonctionnalités inhérentes. Quelle que soit l’approche que vous utilisez, le .NET Framework fournit la fonctionnalité permettant de dessiner une interface graphique personnalisée pour tout contrôle que vous créez.

La peinture d’un contrôle est effectuée par l’exécution du code dans la méthode du OnPaint contrôle. L’argument unique de la OnPaint méthode est un PaintEventArgs objet qui fournit toutes les informations et fonctionnalités requises pour restituer votre contrôle. Fournit PaintEventArgs en tant que propriétés deux objets principaux qui seront utilisés dans le rendu de votre contrôle :

  • ClipRectangle objet : rectangle qui représente la partie du contrôle qui sera dessinée. Il peut s’agir de l’ensemble du contrôle ou d’une partie du contrôle en fonction de la façon dont le contrôle est dessiné.

  • Graphics objet : encapsule plusieurs objets et méthodes orientés graphiques qui fournissent les fonctionnalités nécessaires pour dessiner votre contrôle.

Pour plus d’informations sur l’objet et sur son Graphics 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 la peinture aura lieu. Si l’ensemble du contrôle doit être actualisé, il ClipRectangle représente la taille de l’ensemble du contrôle. Si une seule partie du contrôle doit être actualisée, toutefois, l’objet ClipRectangle représente uniquement la région à redessiner. Un exemple de tel cas serait qu’un contrôle était partiellement masqué par un autre contrôle ou formulaire dans l’interface utilisateur.

Lorsque vous héritez de la Control classe, vous devez remplacer la méthode et fournir du OnPaint code de rendu graphique. Si vous souhaitez fournir une interface graphique personnalisée à un contrôle utilisateur ou à un contrôle hérité, vous pouvez également le faire en remplaçant la OnPaint méthode. Voici un exemple :

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

L’exemple précédent montre comment afficher un contrôle avec une représentation graphique très simple. Il appelle la OnPaint méthode de la classe de base, il crée un Pen objet avec lequel dessiner, puis dessine enfin un ellipse dans le rectangle déterminé par le Location contrôle et Size le contrôle. Bien que la plupart des codes de rendu soient beaucoup plus compliqués que cela, cet exemple illustre l’utilisation de l’objet Graphics contenu dans l’objet PaintEventArgs . Notez que si vous héritez d’une classe qui a déjà une représentation graphique, telle que UserControl ou Button, et que vous ne souhaitez pas incorporer cette représentation dans votre rendu, vous ne devez pas appeler la méthode de votre classe de OnPaint base.

Le code de la OnPaint méthode de votre contrôle s’exécute lorsque le contrôle est dessiné pour la première fois, et chaque fois qu’il est actualisé. Pour vous assurer que votre contrôle est redessiné chaque fois qu’il est redimensionné, ajoutez la ligne suivante au constructeur de votre contrôle :

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

Remarque

Utilisez la Control.Region propriété pour implémenter un contrôle non rectangulaire.

Voir aussi