Partager via


Contrôles avec support Built-In Owner-Drawing

Le dessin propriétaire dans Windows Forms, également appelé dessin personnalisé, est une technique permettant de modifier l’apparence visuelle de certains contrôles.

Remarque

Le mot « contrôle » dans cette rubrique est utilisé pour désigner les classes qui dérivent soit de Control, soit de Component.

En règle générale, Windows gère la peinture automatiquement à l’aide de paramètres de propriété tels que BackColor pour déterminer l’apparence d’un contrôle. Avec le dessin par le propriétaire, vous prenez en charge le processus de peinture, en modifiant les éléments visuels qui ne peuvent être modifiés à l'aide de propriétés. Par exemple, de nombreux contrôles vous permettent de définir la couleur du texte affiché, mais vous êtes limité à une seule couleur. Le dessin propriétaire vous permet d’effectuer des opérations telles que l’affichage d’une partie du texte en noir et en rouge.

Dans la pratique, le dessin par le propriétaire est similaire au dessin de graphiques sur un formulaire. Par exemple, vous pourriez utiliser des méthodes graphiques dans un gestionnaire pour l’événement du formulaire afin d'émuler un Paint contrôle ListBox, mais vous devrez écrire votre propre code pour gérer toutes les interactions utilisateur. Avec le dessin du propriétaire, le contrôle utilise votre code pour dessiner son contenu, mais conserve sinon toutes ses fonctionnalités intrinsèques. Vous pouvez utiliser des méthodes graphiques pour dessiner chaque élément dans le contrôle ou personnaliser certains aspects de chaque élément pendant que vous utilisez l’apparence par défaut pour d’autres aspects de chaque élément.

Dessin personnalisé dans les contrôles Windows Forms

Pour effectuer un dessin propriétaire dans des contrôles qui le prennent en charge, vous devez généralement définir une propriété et gérer un ou plusieurs événements.

La plupart des contrôles qui prennent en charge le dessin propriétaire ont une propriété OwnerDraw ou DrawMode qui indique si le contrôle déclenche son événement ou ses événements liés au dessin lorsqu’il s'affiche.

Les contrôles qui n’ont pas de OwnerDraw propriété ou DrawMode incluent le DataGridView contrôle, qui fournit des événements de dessin qui se produisent automatiquement, et le ToolStrip contrôle, qui est dessiné à l’aide d’une classe de rendu externe qui a ses propres événements liés au dessin.

Il existe de nombreux types d’événements de dessin différents, mais un événement de dessin classique se produit afin de dessiner un élément unique dans un contrôle. Le gestionnaire d’événements reçoit un EventArgs objet qui contient des informations sur l’élément dessiné et les outils que vous pouvez utiliser pour le dessiner. Par exemple, cet objet contient généralement 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 Graphics objet pour appeler des méthodes de peinture. Pour certains é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 qui contient vos personnalisations dessinées par le propriétaire, créez une classe qui dérive d’une classe de contrôle qui prend en charge le dessin propriétaire. Au lieu de gérer les événements de dessin, incluez votre code de dessin propriétaire dans les remplacements de la méthode ou des méthodes On appropriées dans la nouvelle classe. Veillez à appeler la méthode ou les méthodes On de la classe de base dans ce cas afin que les utilisateurs de votre contrôle puissent gérer les événements de dessin de propriétaire et fournir une personnalisation supplémentaire.

Les contrôles Windows Forms suivants prennent en charge le dessin personnalisé dans toutes les versions du .NET Framework :

Les contrôles suivants prennent en charge le dessin du propriétaire uniquement dans .NET Framework 2.0 :

Les contrôles suivants prennent en charge le dessin du propriétaire et sont nouveaux dans .NET Framework 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ôleur soit tous d'une seule taille, soit de tailles variées.

Remarque

Bien que le CheckedListBox contrôle soit dérivé du ListBox contrôle, il ne prend pas en charge le dessin du propriétaire.

Pour dessiner chaque élément de la même taille, définissez la propriété DrawMode à OwnerDrawFixed et gérez l’événement DrawItem.

Pour dessiner chaque élément à l’aide d’une taille différente, définissez la DrawMode propriété sur OwnerDrawVariable et gérez les événements et MeasureItem les DrawItem événements. 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, notamment des exemples de code, consultez les rubriques suivantes :

Le MenuItem composant représente un élément de menu unique dans un ou MainMenu un ContextMenu composant.

Pour dessiner un MenuItem, définissez la propriété OwnerDraw à true et gérez l'événement DrawItem. Pour personnaliser la taille d'un élément de menu avant que l'événement DrawItem se produise, traitez l'événement MeasureItem de l'élément.

Pour plus d’informations, notamment des exemples de code, consultez les rubriques de référence suivantes :

Contrôle TabControl

Le TabControl contrôle vous permet de dessiner des onglets individuels dans le contrôle. Le dessin propriétaire affecte uniquement les onglets ; le contenu n’est TabPage pas affecté.

Pour dessiner chaque onglet dans un TabControl, définissez la DrawMode propriété sur 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, notamment des exemples de code, consultez les rubriques de référence suivantes :

Composant ToolTip

Le ToolTip composant vous permet de dessiner l’info-bulle entière lorsqu’il est affiché.

Pour dessiner un ToolTip, définissez la propriété OwnerDraw à true et gérez l'événement Draw. Pour personnaliser la taille de l’événement ToolTip avant l’événement Draw , gérez l’événement Popup et définissez la ToolTipSize propriété dans le gestionnaire d’événements.

Pour plus d’informations, notamment des exemples de code, consultez les rubriques de référence suivantes :

Contrôle ListView

Le ListView contrôle vous permet de dessiner des éléments individuels, des sous-éléments et des en-têtes de colonne dans le contrôle.

Pour activer le dessin du propriétaire dans le contrôle, définissez la OwnerDraw propriété sur true.

Pour dessiner chaque élément dans le contrôle, gérez l’événement DrawItem .

Pour dessiner chaque sous-élément ou l'en-tête de colonne dans le contrôle lorsque la propriété View est définie sur Details, gérez les événements DrawSubItem et DrawColumnHeader.

Pour plus d’informations, notamment des exemples de code, consultez les rubriques de référence suivantes :

Contrôle TreeView

Le TreeView contrôle vous permet de dessiner des nœuds individuels dans le contrôle.

Pour dessiner uniquement le texte affiché dans chaque nœud, définissez la propriété DrawMode sur OwnerDrawText et gérez l'événement DrawNode afin de dessiner le texte.

Pour dessiner tous les éléments de chaque nœud, définissez la DrawMode propriété OwnerDrawAll sur et gérez l’événement DrawNode pour dessiner les éléments dont vous avez besoin, tels que du texte, des icônes, des cases à cocher, des signes plus et moins et des lignes connectant les nœuds.

Pour plus d’informations, notamment des exemples de code, consultez les rubriques de référence suivantes :

Contrôle DataGridView

Le DataGridView contrôle vous permet de dessiner des cellules et des lignes individuelles dans le contrôle.

Pour dessiner des cellules individuelles, gérez l’événement CellPainting .

Pour dessiner des lignes individuelles ou des éléments de celles-ci, gérez un ou les deux événements RowPrePaint et RowPostPaint. L’événement RowPrePaint se produit avant que les cellules d’une ligne soient peintes, et l’événement RowPostPaint se produit après la peinture des cellules. Vous pouvez gérer les événements et l’événement CellPainting pour peindre l’arrière-plan de ligne, les cellules individuelles et le premier plan de ligne séparément, ou vous pouvez fournir des personnalisations spécifiques où vous en avez besoin et utiliser l’affichage par défaut pour d’autres éléments de la ligne.

Pour plus d’informations, notamment des exemples de code, consultez les rubriques suivantes :

ToolStrip (contrôle)

ToolStrip et les contrôles dérivés vous permettent de personnaliser n’importe quel aspect de leur apparence.

Pour fournir un rendu personnalisé pour les contrôles ToolStrip, définissez la propriété Renderer d'un objet ToolStrip, ToolStripManager, ToolStripPanel ou ToolStripContentPanel sur un objet ToolStripRenderer et gérez un ou plusieurs des nombreux événements de dessin fournis par la classe ToolStripRenderer. Vous pouvez également définir une Renderer propriété sur une instance de votre propre classe dérivée de ToolStripRenderer, ToolStripProfessionalRendererou ToolStripSystemRenderer qui implémente ou remplace des méthodes On spécifiques.

Pour plus d’informations, notamment des exemples de code, consultez les rubriques suivantes :

Voir aussi