Partager via


Architecture du contrôle ToolStrip

Les classes ToolStrip et ToolStripItem fournissent un système flexible et extensible pour afficher des éléments de barre d'outils, d'état et de menu. Ces classes figurent toutes dans l'espace de noms System.Windows.Forms et portent généralement le préfixe « ToolStrip » (ToolStripOverflow, par exemple) ou le suffixe « Strip » (MenuStrip, par exemple).

ToolStrip

Les rubriques suivantes décrivent le ToolStrip et les contrôles qui en dérivent.

ToolStrip est la classe de base abstraite de MenuStrip, StatusStrip et ContextMenuStrip. Le modèle objet suivant illustre la hiérarchie d'héritage de ToolStrip.

Modèle objet ToolStrip

Modèle objet ToolStrip

Vous pouvez accéder à tous les éléments d'un contrôle ToolStrip via la collection Items. Vous pouvez accéder à tous les éléments d'un contrôle ToolStripDropDownItem via la collection DropDownItems. Dans une classe dérivée de ToolStrip, vous pouvez aussi utiliser la propriété DisplayedItems pour accéder uniquement aux éléments actuellement affichés. Il s'agit des éléments qui ne figurent pas actuellement dans un menu de dépassement de capacité.

Les éléments suivants sont spécifiquement conçus pour fonctionner de façon transparente avec ToolStripSystemRenderer et ToolStripProfessionalRenderer dans toutes les orientations. Ils sont disponibles par défaut au moment du design pour le contrôle ToolStrip :

MenuStrip est le conteneur de niveau supérieur qui remplace MainMenu. Il fournit également des fonctionnalités de gestion de clé et d'interface multidocument (MDI, Multiple Document Interface). ToolStripDropDownItem et ToolStripMenuItem fonctionnent avec MenuStrip, bien qu'ils soient dérivés de ToolStripItem.

Les éléments suivants sont spécialement conçus pour travailler de façon transparente à la fois avec ToolStripSystemRenderer et avec ToolStripProfessionalRenderer dans toutes les orientations. Ils sont disponibles par défaut au moment du design pour le contrôle MenuStrip :

StatusStrip

StatusStrip remplace le contrôle StatusBar. Les fonctionnalités spéciales de StatusStrip incluent une disposition du tableau personnalisée, la prise en charge des poignées de dimensionnement et de déplacement du formulaire, et la propriété Spring qui permet à un ToolStripStatusLabel de remplir automatiquement l'espace disponible.

Les éléments suivants sont spécialement conçus pour travailler de façon transparente à la fois avec ToolStripSystemRenderer et avec ToolStripProfessionalRenderer dans toutes les orientations. Ils sont disponibles par défaut au moment du design pour le contrôle StatusStrip :

ContextMenuStrip

ContextMenuStrip remplace ContextMenu. Vous pouvez associer un ContextMenuStrip à tout contrôle, et un clic droit affiche automatiquement le menu contextuel. Vous pouvez également afficher un ContextMenuStrip par programmation à l'aide de la méthode Show. ContextMenuStrip prend en charge les événements annulables Opening et Closing pour gérer les scénarios de remplissage dynamique et de clics multiples. ContextMenuStrip prend en charge les images, l'état d'activation des éléments de menu, le texte, les touches d'accès rapide, les raccourcis et les menus en cascade.

Les éléments suivants sont spécifiquement conçus pour fonctionner de façon transparente avec ToolStripSystemRenderer et ToolStripProfessionalRenderer dans toutes les orientations. Ils sont disponibles par défaut au moment du design pour le contrôle ContextMenuStrip :

Fonctionnalités génériques de ToolStrip

Les rubriques suivantes décrivent les fonctionnalités et le comportement qui sont génériques aux ToolStrip et contrôles dérivés.

Peinture

Vous pouvez appliquer une peinture personnalisée aux contrôles ToolStrip de plusieurs façons. Comme avec d'autres contrôles Windows Forms, les ToolStrip et ToolStripItem ont tous deux des méthodes OnPaint et des événements Paint substituables. Comme avec la peinture ordinaire, le système de coordonnées est relatif à la zone cliente du contrôle ; en d'autres termes, l'angle supérieur gauche du contrôle a pour coordonnées 0, 0. L'événement Paint et la méthode OnPaint d'un ToolStripItem se comportent comme d'autres événements de peinture de contrôle.

Les contrôles ToolStrip fournissent également un accès plus précis au rendu des éléments et du conteneur par le biais de la classe ToolStripRenderer, qui a des méthodes substituables pour peindre l'arrière-plan, l'arrière-plan de l'élément, l'image de l'élément, la flèche de l'élément, le texte de l'élément et la bordure du ToolStrip. Les arguments d'événement pour ces méthodes exposent plusieurs propriétés, telles que des rectangles, couleurs et formats de texte que vous pouvez ajuster en fonction de vos souhaits.

Pour ajuster uniquement quelques aspects de la façon dont un élément est peint, vous substituez en général la ToolStripRenderer.

Si vous écrivez un nouvel élément et souhaitez contrôler tous les aspects de la peinture, substituez la méthode OnPaint. À partir de OnPaint, vous pouvez utiliser des méthodes de la ToolStripRenderer.

Par défaut, le ToolStrip fait l'objet d'une double mise en mémoire tampon, en tirant parti du paramètre OptimizedDoubleBuffer.

Parentage

Le concept de parentage et propriété de conteneur est plus complexe dans les contrôles ToolStrip que dans d'autres contrôles conteneur Windows Forms. Cela est nécessaire pour prendre en charge des scénarios dynamiques, tels que le dépassement de capacité, le partage des éléments déroulants entre plusieurs éléments ToolStrip, et pour prendre en charge la génération d'un ContextMenuStrip à partir d'un contrôle.

La liste suivante décrit des membres associés au parentage et leur utilisation.

  • OwnerItem accède à l'élément qui est la source de l'élément déroulant. Il est semblable à SourceControl, mais retourne un ToolStripItem au lieu d'un contrôle.

  • SourceControl détermine le contrôle qui est la source du ContextMenuStrip lorsque plusieurs contrôles partagent le même ContextMenuStrip.

  • GetCurrentParent est un accesseur en lecture seule à la propriété Parent. Un parent est différent d'un propriétaire, car il dénote le ToolStrip actuel retourné dans lequel l'élément est affiché, qui peut se trouver dans la zone de débordement.

  • Owner retourne le ToolStrip dont la collection Items contient le ToolStripItem actuel. Il s'agit de la meilleure façon de référencer ImageList ou d'autres propriétés dans le ToolStrip de niveau supérieur sans écrire de code spécial pour gérer le dépassement de capacité.

Comportement des contrôles hérités

Les contrôles suivants sont verrouillés chaque fois qu'ils sont utilisés en héritage :

Par exemple, créez une application Windows Forms en utilisant un ou plusieurs des contrôles de la liste précédente. Affectez au modificateur d'accès d'un ou de plusieurs contrôles la valeur public ou protected, puis générez le projet. Ajoutez un formulaire qui hérite du premier formulaire, puis sélectionnez un contrôle hérité. Le contrôle apparaît verrouillé et se comporte comme si son modificateur d'accès avait la valeur private.

Prise en charge de l'héritage par ToolStripContainer

Le contrôle ToolStripContainer prend en charge des scénarios hérités limités, semblables à l'exemple suivant :

  1. Créez une nouvelle application Windows Forms.

  2. Ajoutez ToolStripContainer au formulaire.

  3. Affectez au modificateur d'accès du ToolStripContainer la valeur public ou protected.

  4. Ajoutez toute combinaison de contrôles ToolStrip, MenuStrip et ContextMenuStrip aux régions ToolStripPanel du ToolStripContainer.

  5. Générez le projet.

  6. Ajoutez un formulaire qui hérite du premier formulaire.

  7. Sélectionnez le ToolStripContainer hérité sur le formulaire.

Comportement hérité des contrôles enfants

Après avoir effectué la procédure précédente, le comportement hérité suivant se produit :

  • Dans le concepteur, le contrôle apparaît avec une icône héritée.

  • Les contrôles ToolStripPanel sont verrouillés ; vous ne pouvez pas sélectionner ni réordonner leur contenu.

  • Vous pouvez ajouter des contrôles au ToolStripContentPanel, déplacer les contrôles et en faire des contrôles enfants du ToolStripContentPanel.

  • Vos modifications sont conservées après avoir généré le formulaire.

    Notes

    Supprimez les modificateurs d'accès de tous les contrôles ToolStripPanel qui font partie d'un ToolStripContainer. Le modificateur d'accès du ToolStripContainer gouverne l'intégralité du contrôle.

Confiance partielle

Les limitations des ToolStrip sous confiance partielle sont conçues pour empêcher toute entrée inopportune d'informations personnelles qui peuvent être utilisées par des personnes ou services non autorisés. Les mesures de protection sont les suivantes :

  • Les contrôles ToolStripDropDown requièrent AllWindows pour afficher des éléments dans un ToolStripControlHost. Cela s'applique à la fois aux contrôles intrinsèques, tels que ToolStripTextBox, ToolStripComboBox et ToolStripProgressBar, et aux contrôles créés par l'utilisateur. Si cette spécification n'est pas satisfaite, ces éléments ne sont pas affichés. Aucune exception n'est levée.

  • L'affectation à la propriété AutoClose de la valeur false n'est pas autorisée, et le paramètre d'événement Closing annulable est ignoré. Il est donc impossible d'entrer plusieurs séquences de touches sans fermer l'élément déroulant. Si cette spécification n'est pas satisfaite, ces éléments ne sont pas affichés. Aucune exception n'est levée.

  • De nombreux événements de gestion de séquences de touches ne seront pas déclenchés s'ils se produisent dans des contextes de confiance partielle autres que AllWindows.

  • Les touches d'accès rapide ne sont pas traitées lorsque AllWindows n'est pas accordé.

Utilisation

Les modèles d'utilisation suivants ont une incidence sur la disposition du ToolStrip, l'interaction du clavier et le comportement d'utilisateur final :

  • Joint dans un ToolStripPanel

    Le ToolStrip peut être repositionné dans le ToolStripPanel et dans les ToolStripPanel. La propriété Dock est ignorée, et si la propriété Stretch a la valeur false, la taille du ToolStrip augmente au fur et à mesure que des éléments sont ajoutés à ToolStripPanel. En général, le ToolStrip ne participe pas à l'ordre de tabulation.

  • Ancré

    Le ToolStrip est placé d'un côté d'un conteneur dans une position fixe, et sa taille se développe sur l'intégralité du bord auquel il est ancré. En général, le ToolStrip ne participe pas à l'ordre de tabulation.

  • Position absolue

    Le ToolStrip est semblable à d'autres contrôles, dans le sens où il est placé par la propriété Location, a une taille fixe et participe en général à l'ordre de tabulation.

Interaction du clavier

Touches d'accès rapide

Combinées avec la touche ALT ou à sa suite, les touches d'accès rapide permettent d'activer un contrôle à l'aide du clavier. ToolStrip prend en charge les touches d'accès rapide explicites et implicites. Une définition explicite utilise un caractère & (et commercial) avant la lettre. Une définition implicite utilise un algorithme qui essaie de trouver un élément correspondant basé sur l'ordre des caractères dans une propriété Text donnée.

Touches de raccourci

Les touches de raccourci utilisées par un MenuStrip emploient une combinaison de l'énumération Keys (qui n'est pas spécifique à l'ordre) pour définir la touche de raccourci. Vous pouvez également utiliser la propriété ShortcutKeyDisplayString pour afficher une touche de raccourci avec uniquement du texte, tel que l'affichage de « Suppr » au lieu de « Supprimer ».

La touche ALT active le MenuStrip sur lequel MainMenuStrip pointe. Ensuite, CTRL+TAB permet de naviguer d'un contrôle ToolStrip à l'autre dans les ToolStripPanels. La touche de tabulation et les touches de direction du pavé numérique permettent de naviguer d'un élément à l'autre dans un ToolStrip. Un algorithme spécial gère la navigation dans la région de dépassement de capacité. ESPACE sélectionne un ToolStripButton, ToolStripDropDownButton ou ToolStripSplitButton.

Focus et validation

En cas d'activation par la touche ALT, le MenuStrip ou ToolStrip ne prend ni ne supprime en général le focus du contrôle qui a actuellement le focus. Si un contrôle est hébergé dans MenuStrip ou un élément déroulant de MenuStrip, le contrôle obtient le focus lorsque l'utilisateur appuie sur la touche TAB. En général, les événements GotFocus, LostFocus, Enter et Leave de MenuStrip peuvent ne pas être déclenchés lorsqu'ils sont activés par le clavier. Dans de tels cas, utilisez à la place les événements MenuActivate et MenuDeactivate.

Par défaut, CausesValidation a la valeur false. Appelez Validate explicitement sur votre formulaire pour effectuer la validation.

Disposition

Vous contrôlez la disposition ToolStrip en choisissant l'un des membres de ToolStripLayoutStyle avec la propriété LayoutStyle.

Dispositions de pile

L'empilement est une action qui consiste à réorganiser les éléments entre eux aux deux extrémités de ToolStrip. La liste suivante décrit les dispositions de pile.

Autres fonctionnalités des dispositions de pile

Alignment détermine la fin du ToolStrip en fonction duquel l'élément est aligné.

Lorsque des éléments ne peuvent pas être contenus dans ToolStrip, un bouton de dépassement de capacité apparaît automatiquement. Le paramètre de propriété Overflow détermine si un élément apparaît systématiquement, autant que nécessaire ou jamais dans la zone de dépassement de capacité.

Dans l'événement LayoutCompleted, vous pouvez inspecter la propriété Placement pour déterminer si un élément est placé dans le ToolStrip principal, le ToolStrip de dépassement de capacité, ou s'il ne s'affiche pas du tout. Les raisons classiques pour lesquelles un élément n'est pas affiché sont que l'élément ne tenait pas dans le ToolStrip principal et que sa propriété Overflow avait la valeur Never.

Rendez un ToolStrip mobile en le plaçant dans ToolStripPanel et en affectant la valeur Visible à GripStyle.

Autres options de disposition

Les autres options de disposition sont Flow et Table.

Mise en page fluide

La disposition Flow est la valeur par défaut pour ContextMenuStrip, ToolStripDropDownMenu et ToolStripOverflow. Elle est semblable à FlowLayoutPanel. Les fonctionnalités de la disposition Flow sont les suivantes :

Présentation tabulaire

La disposition Table est la valeur par défaut pour StatusStrip. Elle est semblable à TableLayoutPanel. Les fonctionnalités de la disposition Flow sont les suivantes :

ToolStripItem

Les rubriques suivantes décrivent le ToolStripItem et les contrôles qui en dérivent.

ToolStripItem est la classe de base abstraite pour tous les éléments qui intègrent un ToolStrip. Le modèle objet suivant illustre la hiérarchie d'héritage de ToolStripItem.

Modèle objet ToolStripItem

Modèle objet ToolStripItem

Les classes ToolStripItem héritent directement de ToolStripItem ou indirectement de ToolStripItem par le biais de ToolStripControlHost ou ToolStripDropDownItem.

Les contrôles ToolStripItem doivent être contenus dans ToolStrip, MenuStrip, StatusStrip ou ContextMenuStrip et ne peuvent pas être ajoutés directement à un formulaire. Les différentes classes de conteneur sont conçues pour contenir un sous-ensemble approprié de contrôles ToolStripItem.

Le tableau suivant répertorie les contrôles ToolStripItem stock et les conteneurs dans lesquels ils s'affichent de façon optimale. Bien que les éléments ToolStrip puissent être hébergés dans tout conteneur dérivé de ToolStrip, ces éléments ont été conçus de façon à s'afficher de façon optimale dans les conteneurs suivants :

Notes

ToolStripDropDown n'apparaît pas dans la boîte à outils du concepteur.

Élément inclus

ToolStrip

MenuStrip

ContextMenuStrip

StatusStrip

ToolStripDropDown

ToolStripButton

Oui

Non

Non

Non

Oui

ToolStripComboBox

Oui

Oui

Oui

Non

Oui

ToolStripSplitButton

Oui

Non

Non

Oui

Oui

ToolStripLabel

Oui

Non

Non

Oui

Oui

ToolStripSeparator

Oui

Oui

Oui

Non

Oui

ToolStripDropDownButton

Oui

Non

Non

Oui

Oui

ToolStripTextBox

Oui

Oui

Oui

Non

Oui

ToolStripMenuItem

Non

Oui

Oui

Non

Non

ToolStripStatusLabel

Non

Non

Non

Oui

Non

ToolStripProgressBar

Oui

Non

Non

Oui

Non

ToolStripControlHost

Oui

Oui

Non

Oui

Oui

ToolStripButton

ToolStripButton est l'élément de bouton pour ToolStrip. Vous pouvez l'afficher avec différents styles de bordure et l'utiliser pour représenter et activer des états opérationnels. Vous pouvez également le définir comme ayant le focus par défaut.

ToolStripLabel

Le ToolStripLabel fournit des fonctionnalités d'étiquette dans les contrôles ToolStrip. Le ToolStripLabel est comme un ToolStripButton qui n'obtient pas le focus par défaut et qui n'est pas restitué comme faisant l'objet d'un push ou en surbrillance.

ToolStripLabel en tant qu'élément hébergé prend en charge les touches d'accès rapide.

Utilisez les propriétés LinkColor, LinkVisited et LinkBehavior sur un ToolStripLabel pour prendre en charge le contrôle de liaison dans un ToolStrip.

ToolStripStatusLabel

ToolStripStatusLabel est une version de ToolStripLabel conçue spécifiquement pour une utilisation dans StatusStrip. Les fonctionnalités spéciales comprennent BorderStyle, BorderSides et Spring.

ToolStripSeparator

ToolStripSeparator ajoute une ligne verticale ou horizontale à une barre d'outils ou à un menu, selon l'orientation. Il fournit le regroupement des éléments ou la distinction entre ceux-ci, par exemple les éléments d'un menu.

Vous pouvez ajouter un ToolStripSeparator au moment du design en le choisissant dans une liste déroulante. Toutefois, vous pouvez également créer automatiquement un ToolStripSeparator en tapant un trait d'union (-) dans le nœud de modèle du concepteur ou dans la méthode Add.

ToolStripControlHost

ToolStripControlHost est la classe de base abstraite de ToolStripComboBox, ToolStripTextBox et ToolStripProgressBar. ToolStripControlHost peut héberger d'autres contrôles, notamment les contrôles personnalisés, de deux façons :

  • Construisez ToolStripControlHost avec une classe qui dérive de Control. Pour accéder pleinement au contrôle hébergé et aux propriétés, vous devez effectuer un cast de la propriété Control en une classe réelle qu'elle représente.

  • Étendez ToolStripControlHost, et dans le constructeur par défaut de la classe héritée, appelez le constructeur de classe de base en passant une classe qui dérive de Control. Cette option permet d'encapsuler des méthodes de contrôle et des propriétés communes facilitant l'accès à ToolStrip.

ToolStripComboBox

ToolStripComboBox est le ComboBox optimisé pour l'hébergement dans un ToolStrip. Un sous-ensemble des événements et des propriétés du contrôle hébergé est exposé au niveau ToolStripComboBox, mais le contrôle ComboBox sous-jacent est accessible via la propriété ComboBox.

ToolStripTextBox

ToolStripTextBox est le TextBox optimisé pour l'hébergement dans un ToolStrip. Un sous-ensemble des événements et des propriétés du contrôle hébergé est exposé au niveau ToolStripTextBox, mais le contrôle TextBox sous-jacent est accessible via la propriété TextBox.

ToolStripProgressBar

ToolStripProgressBar est le ProgressBar optimisé pour l'hébergement dans un ToolStrip. Un sous-ensemble des événements et des propriétés du contrôle hébergé est exposé au niveau ToolStripProgressBar, mais le contrôle ProgressBar sous-jacent est accessible via la propriété ProgressBar.

ToolStripDropDownItem

ToolStripDropDownItem est la classe de base abstraite pour ToolStripMenuItem, ToolStripDropDownButton et ToolStripSplitButton, qui peuvent héberger des éléments directement ou héberger des éléments supplémentaires dans un conteneur déroulant. Pour ce faire, affectez ToolStripDropDown à la propriété DropDown et définissez la propriété Items de ToolStripDropDown. Accédez directement à ces éléments déroulants par le biais de la propriété DropDownItems.

ToolStripMenuItem

ToolStripMenuItem est un ToolStripDropDownItem qui fonctionne avec ToolStripDropDownMenu et ContextMenuStrip pour gérer la mise en surbrillance spéciale, la disposition et la disposition des colonnes pour les menus.

ToolStripDropDownButton

ToolStripDropDownButton ressemble à ToolStripButton, mais affiche une zone déroulante lorsque l'utilisateur clique dessus. Masquez ou affichez la flèche de déroulement en définissant la propriété ShowDropDownArrow. ToolStripDropDownButton héberge un ToolStripOverflowButton qui affiche des éléments dépassant du ToolStrip.

ToolStripSplitButton

ToolStripSplitButton associe les fonctions de bouton et de bouton déroulant.

Utilisez la propriété DefaultItem pour synchroniser l'événement Click de l'élément déroulant choisi avec l'élément indiqué sur le bouton.

Fonctionnalités génériques de ToolStripItem

ToolStripItem fournit les options et fonctionnalités génériques suivantes aux contrôles qui héritent :

  • Événements principaux

  • Gestion des images

  • Alignement

  • Relation entre l'image et le texte

  • Style d'affichage

Événements principaux

Les contrôles ToolStripItem reçoivent leurs propres événements Click, de souris et Paint ; ils peuvent en outre exécuter certains prétraitements clavier.

Gestion des images

Les propriétés Image, ImageAlign, ImageIndex, ImageKey et ImageScaling se rapportent à certains aspects de la gestion des images. Utilisez des images dans les contrôles ToolStrip en définissant ces propriétés directement ou en définissant la propriété ImageList au moment de l'exécution uniquement.

La mise à l'échelle des images est déterminée par l'interaction de propriétés à la fois dans ToolStrip et ToolStripItem, comme suit :

Alignement

La valeur de la propriété Alignment détermine l'extrémité du ToolStrip à laquelle un élément apparaît. La propriété Alignment fonctionne uniquement lorsque le style de disposition du ToolStrip a pour valeur l'une des valeurs de dépassement de capacité de la pile.

Les éléments sont placés sur le ToolStrip dans l'ordre dans lequel ils apparaissent dans la collection Items. Pour changer par programme l'emplacement où un élément est disposé, utilisez la méthode Insert pour déplacer l'élément dans la collection. Cette méthode déplace l'élément, mais ne le duplique pas.

Relation entre l'image et le texte

La propriété TextImageRelation définit le positionnement relatif de l'image par rapport au texte sur un ToolStripItem. Les éléments auxquels il manque une image, du texte, ou les deux, sont traités comme des cas spéciaux afin que le ToolStripItem n'affiche pas d'emplacement vide pour le ou les éléments manquants.

Style d'affichage

DisplayStyle vous permet de définir les valeurs des propriétés de texte et d'image d'un élément tout en affichant uniquement ce que vous souhaitez. Cette fonctionnalité est en général utilisée pour modifier uniquement le style d'affichage lors de l'affichage du même élément dans un contexte différent.

Classes d'accessoires

Les classes qui fournissent de nombreuses autres fonctionnalités incluent :

Voir aussi

Référence

Vue d'ensemble du contrôle ToolStrip (Windows Forms)

Concepts

Résumé de la technologie ToolStrip

Autres ressources

ToolStrip, contrôle (Windows Forms)

MenuStrip, contrôle (Windows Forms)

StatusStrip, contrôle

ContextMenuStrip, contrôle

BindingNavigator, contrôle (Windows Forms)