Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous présente les contrôles personnalisés et explique comment ils sont différents des contrôles utilisateur. Les contrôles personnalisés n'offrent pas de surface de conception visuelle et s'appuient sur le code fourni par l'utilisateur pour se représenter eux-mêmes. Cela diffère des contrôles utilisateur qui fournissent une surface de conception visuelle pour regrouper plusieurs contrôles en une seule unité réutilisable.
Les contrôles personnalisés sont utilisés lorsqu’un contrôle existant ou un contrôle utilisateur n’est pas proche de fournir l’interface utilisateur ou l’interactivité dont vous avez besoin. Ils nécessitent davantage d’efforts de votre part pour mettre entièrement en œuvre. La gestion du clavier et de la souris est toujours fournie par Windows Forms, mais tous les comportements sont laissés à vous pour implémenter. Il n’existe pas d’aire de conception fournie avec un contrôle personnalisé, car tout le dessin est effectué via du code dans la OnPaint méthode. Les composants, tels qu’un Timer, peuvent toujours être ajoutés via l’aire de conception nonvisuelle.
Classe de base
Il existe deux classes de base à choisir lors de la création d’un contrôle personnalisé :
-
Il s’agit de la même classe de base que celle utilisée par d’autres contrôles Windows Forms. Vous contrôlez directement l’entrée et la sortie du contrôle.
System.Windows.Forms.ScrollableControl
Certains contrôles Windows Forms utilisent cette classe de base. Cette classe s’étend
Control
en ajoutant la possibilité de faire défiler le contenu.
Sauf si vous avez besoin de faire défiler le contenu du contrôle personnalisé, utilisez-le Control
comme classe de base.
Fonctionnalités héritées
Étant donné que la classe de base d’un contrôle personnalisé est Control, vous héritez automatiquement des fonctionnalités Windows Forms partagées par tous les contrôles. Voici quelques-unes des fonctionnalités que vous obtenez avec un contrôle personnalisé :
- Saisie du clavier et de la souris.
- Comportements de disposition, tels que l’ancrage et l’amarrage.
- Prise en charge des tabulations.
- Restrictions de taille minimale et maximale.
Peinture
La peinture, qui signifie dessiner le visuel du contrôle, est effectuée en remplaçant la OnPaint méthode. Pour plus d’informations sur la façon dont les contrôles effectuent la peinture, consultez Peinture et dessin sur les contrôles.
Lorsque vous créez un contrôle personnalisé à l’aide des modèles Visual Studio, la OnPaint
méthode est automatiquement remplacée pour vous. Le modèle effectue cette opération, car vous devez écrire le code pour dessiner votre contrôle. Voici un exemple de ce que le modèle génère :
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
Un contrôle personnalisé est peint avec la méthode OnPaint. L’argument unique de cette méthode est un PaintEventArgs objet, qui fournit toutes les informations et fonctionnalités requises pour restituer votre contrôle.
PaintEventArgs
fournit deux propriétés utilisées dans le rendu de votre contrôle :
PaintEventArgs.ClipRectangle— Représente la partie du contrôle qui doit être redessinée. Il peut s’agir de l’ensemble du contrôle ou d’une partie du contrôle.
Graphics— Représente l’aire graphique de votre contrôle. Il fournit plusieurs objets et méthodes orientés graphiques qui fournissent les fonctionnalités nécessaires pour dessiner votre contrôle.
La OnPaint
méthode est appelée chaque fois que le contrôle est dessiné ou actualisé à l’écran, et l’objet PaintEventArgs.ClipRectangle
représente le rectangle dans lequel la peinture a lieu. Si l’ensemble du contrôle doit être actualisé, PaintEventArgs.ClipRectangle
représente la taille de l’ensemble du contrôle. Si seule une partie du contrôle doit être actualisée, elle représente uniquement la région à redessiner. Un exemple de tel cas serait qu’un contrôle est partiellement masqué par un autre contrôle dans l’interface utilisateur et que d’autres contrôles sont déplacés, la partie nouvellement exposée du contrôle sous-jacent doit être redessinée.
Le code dans la OnPaint méthode d’un contrôle s’exécute lorsque le contrôle est dessiné pour la première fois et chaque fois qu’il est invalidé. 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)
Exemple :
L’extrait de code suivant est un contrôle personnalisé qui affiche plusieurs rectangles colorés autour du bord du contrôle.
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
Le code précédent crée un contrôle qui ressemble à l’image suivante :
Contexte
Notez que l’arrière-plan du contrôle est peint avec la SystemColors.Control couleur, même si le OnPaint
code n’efface pas ou ne remplit pas le contrôle avec une couleur. L’arrière-plan est en fait peint par la OnPaintBackground(PaintEventArgs) méthode avant OnPaint
d’être appelé. Remplacez OnPaintBackground
la gestion du dessin de l’arrière-plan de votre contrôle. L’implémentation par défaut de cette méthode consiste à dessiner la couleur et l’image définies par les BackColor propriétés, BackgroundImage respectivement.
Contenu connexe
.NET Desktop feedback