Contrôles avec prise en charge intégrée des dessins owner-drawn
Mise à jour : novembre 2007
Le dessin owner-drawn dans Windows Forms, qui est également qualifié de dessin personnalisé, est une technique qui consiste à modifier l'apparence visuelle de certains contrôles.
Remarque : |
---|
Dans cette rubrique, le mot "contrôle" fait référence aux classes qui dérivent de Control ou de Component. |
En règle générale, Windows gère automatiquement la peinture à l'aide de paramètres de propriété tels que BackColor pour déterminer l'apparence d'un contrôle. Avec le dessin owner-drawn, vous prenez le contrôle du processus de peinture, en modifiant des éléments d'apparence qui ne sont pas accessibles aux propriétés. Par exemple, nombre de contrôles vous permettent de définir la couleur du texte qui est affiché, mais vous êtes limités à une seule couleur. Le dessin owner-drawn vous permet d'effectuer des choses comme afficher une partie du texte en noir et une autre en rouge.
En pratique, le dessin owner-drawn équivaut à dessiner des graphiques sur un formulaire. Par exemple, vous pourriez utiliser des méthodes graphiques dans un gestionnaire pour l'événement Paint du formulaire afin d'émuler un contrôle ListBox, mais vous devriez écrire votre propre code pour gérer toutes les interactions de l'utilisateur. Avec le dessin owner-drawn, le contrôle utilise votre code pour dessiner son contenu, mais conserve tout de même toutes ses capacités intrinsèques. Vous pouvez utiliser des méthodes graphiques pour dessiner chaque élément dans le contrôle ou pour personnaliser certains aspects de chaque élément tandis que vous utilisez l'apparence par défaut pour d'autres aspects de chaque élément.
Dessin owner-drawn dans les contrôles Windows Forms
Pour effectuer le dessin owner-drawn dans les contrôles que le prennent en charge, vous définissez généralement une propriété et gérez un ou plusieurs événements.
La plupart des contrôles qui prennent en charge le dessin owner-drawn ont une propriété OwnerDraw ou DrawMode qui indique si le contrôle déclenche son ou ses événements de dessin lorsqu'il peint.
Les contrôles qui n'ont pas de propriété OwnerDraw ou DrawMode comprennent le contrôle DataGridView, qui fournit des événements de dessin qui se produisent automatiquement, et le contrôle ToolStrip, qui est dessiné à l'aide d'une classe de rendu externe qui possède ses propres événements de dessin.
Il y existe de nombreux types de dessin différents, mais un événement de dessin typique a lieu pour dessiner un élément dans un contrôle. Le gestionnaire d'événements reçoit un objet EventArgs qui contient des informations sur l'élément qui est dessiné et les outils que vous pouvez utiliser pour le dessiner. Par exemple, cet objet contient en général le numéro d'index de l'élément dans sa collection parente, un Rectangle qui indique les limites d'affichage de l'élément, et un objet Graphics pour appeler les méthodes de peinture. Pour quelques événements, l'objet EventArgs fournit des informations supplémentaires sur l'élément et les méthodes que vous pouvez appeler pour peindre certains aspects de l'élément par défaut, tels que l'arrière-plan ou un rectangle de focus.
Pour créer un contrôle réutilisable contenant vos personnalisations owner-drawn, créez une nouvelle classe qui dérive d'une classe de contrôle qui prend en charge le dessin owner-drawn. Plutôt que de gérer des événements de dessin, incluez votre code de dessin owner-drawn dans les substitutions pour la ou les méthodes OnNomÉvénement appropriées dans la nouvelle classe. Veillez à appeler dans ce cas la ou les méthodes OnNomÉvénement de la classe de base pour que les utilisateurs de votre contrôle puissent gérer les événements owner-drawing et fournir une personnalisation supplémentaire.
Les contrôles Windows Forms suivants prennent en charge le dessin owner-drawn dans toutes les versions du .NET Framework :
MenuItem (utilisé par MainMenu et ContextMenu)
Les contrôles suivants prennent en charge le dessin owner-drawn dans .NET Framework version 2.0 uniquement :
Les contrôles suivants prennent en charge le dessin owner-drawn et sont nouveaux dans .NET Framework version 2.0 :
Les sections suivantes fournissent des détails supplémentaires pour chacun de ces contrôles.
Contrôles ListBox et ComboBox
Les contrôles ListBox et ComboBox vous permettent de dessiner des éléments individuels dans le contrôle tous dans la même taille ou dans des tailles différentes.
Remarque : |
---|
Bien que le contrôle CheckedListBox soit dérivé du contrôle ListBox, il ne prend pas en charge le dessin owner-drawn. |
Pour dessiner chaque élément dans la même taille, donnez à la propriété DrawMode la valeur OwnerDrawFixed et gérez l'événement DrawItem.
Pour dessiner chaque élément dans une taille différente, donnez à la propriété DrawMode la valeur OwnerDrawVariable et gérez à la fois les événements MeasureItem et DrawItem. L'événement MeasureItem vous permet d'indiquer la taille d'un élément avant que l'événement DrawItem ne se produise pour cet élément.
Pour plus d'informations, y compris des exemples de code, consultez les rubriques suivantes :
Composant MenuItem
Le composant MenuItem représente un élément de menu unique dans un composant MainMenu ou ContextMenu.
Pour dessiner un MenuItem, donnez à sa propriété OwnerDraw la valeur true et gérez son événement DrawItem. Pour personnaliser la taille de l'élément de menu avant que l'événement DrawItem ne se produise, gérez l'événement MeasureItem de l'élément.
Pour plus d'informations, y compris des exemples de code, consultez les rubriques de référence suivantes :
Contrôle TabControl
Le contrôle TabControl vous permet de dessiner des onglets individuels dans le contrôle. Le dessin owner-drawn affecte uniquement les onglets, pas le contenu de TabPage.
Pour dessiner chaque onglet dans un TabControl, donnez à la propriété DrawMode la valeur OwnerDrawFixed et gérez l'événement DrawItem. Cet événement se produit une fois pour chaque onglet uniquement lorsque l'onglet est visible dans le contrôle.
Pour plus d'informations, y compris des exemples de code, consultez les rubriques de référence suivantes :
Composant ToolTip
Le composant ToolTip vous permet de dessiner l'ensemble de l'info-bulle lorsqu'il est affiché.
Pour dessiner un ToolTip, donnez à sa propriété OwnerDraw la valeur true et gérez son événement Draw. Pour personnaliser la taille du ToolTip avant que l'événement Draw ne se produise, gérez l'événement Popup et définissez la propriété ToolTipSize dans le gestionnaire d'événements.
Pour plus d'informations, y compris des exemples de code, consultez les rubriques de référence suivantes :
Contrôle ListView
Le contrôle ListView vous permet de dessiner des éléments, des sous-éléments et des en-têtes de colonne dans le contrôle.
Pour permettre le dessin owner-drawn dans le contrôle, donnez à la propriété OwnerDraw la valeur true.
Pour dessiner chaque élément dans le contrôle, gérez l'événement DrawItem.
Pour dessiner chaque sous-élément ou en-tête de colonne dans le contrôle lorsque la propriété View a la valeur Details, gérez les événements DrawSubItem et DrawColumnHeader.
Pour plus d'informations, y compris des exemples de code, consultez les rubriques de référence suivantes :
Contrôle TreeView
Le contrôle TreeView vous permet de dessiner des nœuds individuels dans le contrôle.
Pour dessiner uniquement le texte affiché dans chaque nœud, donnez à la propriété DrawMode la valeur OwnerDrawText et gérez l'événement DrawNode pour dessiner le texte.
Pour dessiner tous les éléments de chaque nœud, donnez à la propriété DrawMode la valeur OwnerDrawAll et gérez l'événement DrawNode pour dessiner n'importe quel élément dont vous avez besoin, tel que du texte, des icônes, des cases à cocher, des signes plus et moins ou des lignes qui relient les nœuds.
Pour plus d'informations, y compris des exemples de code, consultez les rubriques de référence suivantes :
Contrôle DataGridView
Le contrôle DataGridView vous permet de dessiner des cellules et des lignes dans le contrôle.
Pour dessiner des cellules, gérez l'événement CellPainting.
Pour dessiner des lignes ou des éléments de ligne, gérez un des événements RowPrePaint et RowPostPaint, ou les deux à la fois. L'événement RowPrePaint se produit avant que les cellules d'une ligne soient peintes ; l'événement RowPostPaint se produit après que les cellules ont été peintes. Vous pouvez gérer les deux événements et l'événement CellPainting pour peindre l'arrière-plan de la ligne, des cellules individuelles et l'avant-plan de la ligne séparément. Vous pouvez aussi fournir des personnalisations spécifiques aux endroits où vous en avez besoin et utiliser l'affichage par défaut pour d'autres éléments de la ligne.
Pour plus d'informations, y compris des exemples de code, consultez les rubriques suivantes :
Comment : personnaliser l'apparence des cellules du contrôle DataGridView Windows Forms
Comment : personnaliser l'apparence des lignes du contrôle DataGridView Windows Forms
Contrôle ToolStrip
ToolStrip et les contrôles dérivés vous permettent de personnaliser n'importe quel aspect de leur apparence.
Pour personnaliser le rendu des contrôles ToolStrip, définissez à un objet ToolStripRenderer la propriété Renderer d'un ToolStrip, ToolStripManager, ToolStripPanel ou ToolStripContentPanel et gérez un ou plusieurs des nombreux événements de dessin fournis par la classe ToolStripRenderer. Vous pouvez aussi définir une propriété Renderer à une instance de votre propre classe dérivée de ToolStripRenderer, ToolStripProfessionalRenderer ou ToolStripSystemRenderer qui implémente ou substitue des méthodes OnNomÉvénement spécifiques.
Pour plus d'informations, y compris des exemples de code, consultez les rubriques suivantes :