Partager via


Architecture de contrôle ToolStrip

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

Barre d'Outils

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

ToolStrip est la classe de base abstraite pour MenuStrip, StatusStripet ContextMenuStrip. Le modèle objet suivant montre la hiérarchie d’héritage ToolStrip.

Diagramme montrant le modèle objet ToolStrip.

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

Les éléments suivants ont été spécifiquement conçus pour fonctionner de manière fluide avec les ToolStripSystemRenderer et ToolStripProfessionalRenderer dans toutes les orientations. Elles 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 des clés et de plusieurs interfaces de document (MDI). Fonctionnellement, ToolStripDropDownItem et ToolStripMenuItem fonctionnent avec MenuStrip, bien qu’ils soient dérivés de ToolStripItem.

Les éléments suivants sont spécifiquement conçus pour fonctionner sans problème avec les ToolStripSystemRenderer et les ToolStripProfessionalRenderer dans toutes les orientations. Elles sont disponibles par défaut au moment du design pour le contrôle MenuStrip :

Barre d'état

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

Les éléments suivants sont spécifiquement conçus pour fonctionner sans problème avec ToolStripSystemRenderer et ToolStripProfessionalRenderer dans toutes les orientations. Elles sont disponibles par défaut au moment du design pour le contrôle StatusStrip :

ContextMenuStrip

ContextMenuStrip remplace ContextMenu. Vous pouvez associer un ContextMenuStrip à n’importe quel contrôle, et un clic droit affiche automatiquement le menu contextuel (ou menu contextuel d'accès rapide). Vous pouvez afficher un ContextMenuStrip par programmation à l’aide de la méthode Show. ContextMenuStrip prend en charge les événements Opening et Closing pouvant être annulés pour gérer la population dynamique et les scénarios à plusieurs clics. ContextMenuStrip prend en charge les images, l’état de vérification des éléments de menu, le texte, les touches d’accès, les raccourcis et les menus en cascade.

Les éléments suivants sont spécifiquement conçus pour fonctionner de manière fluide avec ToolStripSystemRenderer et ToolStripProfessionalRenderer dans toutes les orientations. Elles 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 génériques des contrôles ToolStrip et dérivés.

Peinture

Vous pouvez personnaliser la peinture dans les contrôles ToolStrip de différentes manières. Comme pour d’autres contrôles Windows Forms, les ToolStrip et les ToolStripItem ont tous deux des méthodes de OnPaint substituables et des événements Paint. Comme avec la peinture standard, le système de coordonnées est relatif à la zone cliente du contrôle graphique ; autrement dit, le coin supérieur gauche du contrôle graphique est 0, 0. L’événement Paint et la méthode OnPaint pour un ToolStripItem se comportent comme d’autres événements de peinture de contrôle.

Les contrôles ToolStrip fournissent également un accès plus fin au rendu des éléments et du conteneur via la classe ToolStripRenderer, qui a des méthodes remplaçables 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 de ces méthodes exposent plusieurs propriétés telles que des rectangles, des couleurs et des formats de texte que vous pouvez ajuster selon vos besoins.

Pour ajuster seulement quelques aspects de la façon dont un élément est peint, vous remplacez généralement le ToolStripRenderer.

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

Par défaut, la ToolStrip utilise un double tampon, profitant des paramètres de OptimizedDoubleBuffer.

Parentalité

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

La liste suivante décrit les membres liés à la parentalité et explique leur utilisation.

  • OwnerItem accède à l’élément qui est la source de l’élément déroulant. Ceci est similaire à SourceControl, mais au lieu de retourner un contrôle, il retourne un ToolStripItem.

  • SourceControl détermine quel contrôle est la source de l'ContextMenuStrip lorsque plusieurs contrôles partagent le même ContextMenuStrip.

  • GetCurrentParent est un accesseur en lecture seule à la propriété Parent. Un parent diffère d'un propriétaire en ce qu'il indique le ToolStrip actuel de retour dans lequel l'élément est affiché, qui pourrait être situé dans la zone de débordement.

  • Owner retourne le ToolStrip dont la collection Items contient le ToolStripItemactuel. Il s’agit du meilleur moyen 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 dans l’héritage :

Par exemple, créez une application Windows Forms à l’aide d’un ou plusieurs contrôles de la liste précédente. Définissez le modificateur d’accès d’un ou plusieurs contrôles sur 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é, il se comporte comme si son modificateur d'accès était private.

Prise en charge de l'héritage dans ToolStripContainer

Le contrôle ToolStripContainer prend en charge des scénarios hérités limités, comme dans l’exemple suivant :

  1. Créez une application Windows Forms.

  2. Ajoutez un ToolStripContainer au formulaire.

  3. Définissez le modificateur d’accès du ToolStripContainer sur public ou protected.

  4. Ajoutez n’importe quelle combinaison de contrôles ToolStrip, MenuStripet ContextMenuStrip aux régions ToolStripPanel du ToolStripContainer.

  5. Construisez 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 de l'enfant

Une fois les étapes précédentes effectuées, le comportement hérité suivant se produit :

  • Dans l'interface de conception, l’élément de contrôle s’affiche avec une icône héritée.

  • Les contrôles ToolStripPanel sont verrouillés ; vous ne pouvez pas sélectionner ou réorganiser 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 persistent après avoir généré le formulaire.

    Note

    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 régit l’ensemble du contrôle.

Confiance partielle

Les limitations des ToolStripdans un environnement de confiance partielle sont conçues pour empêcher l'entrée accidentelle d'informations personnelles susceptibles d'être utilisées par des personnes ou services non autorisés. Les mesures de protection sont les suivantes :

  • Les contrôles ToolStripDropDown nécessitent AllWindows pour afficher des éléments dans un ToolStripControlHost. Cela s’applique aux deux contrôles intrinsèques tels que ToolStripTextBox, ToolStripComboBoxet ToolStripProgressBar ainsi qu’aux contrôles créés par l’utilisateur. Si cette exigence n’est pas remplie, ces éléments ne sont pas affichés. Aucune exception n’est levée.

  • La définition de la propriété AutoClose sur false n’est pas autorisée, et le paramètre d’événement Closing pouvant être annulé est ignoré. Cela rend impossible de saisir plusieurs frappes de touche sans fermer l'élément déroulant. Si cette exigence n’est pas remplie, ces éléments ne sont pas affichés. Aucune exception n’est levée.

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

  • Les clés d’accès ne sont pas traitées lorsque AllWindows n’est pas accordé.

Utilisation

Les modèles d’utilisation suivants ont un impact sur la disposition ToolStrip, l’interaction au clavier et le comportement de l’utilisateur final :

  • Intégré dans un ToolStripPanel

    Le ToolStrip peut être repositionné dans le ToolStripPanel et à travers les ToolStripPanels. La propriété Dock est ignorée et si la propriété Stretch est false, la taille du ToolStrip augmente à mesure que les éléments sont ajoutés à la ToolStripPanel. En règle générale, le ToolStrip ne participe pas à l’ordre de tabulation.

  • Amarré

    Le ToolStrip est placé sur un côté d’un conteneur dans une position fixe, et sa taille s’étend sur l’ensemble du bord auquel il est ancré. Généralement, le ToolStrip ne participe pas à l’ordre de tabulation.

  • Positionné de façon absolue

    Le ToolStrip est semblable à d’autres contrôles, dans le fait qu’il est placé par la propriété Location, a une taille fixe et participe généralement à l’ordre de tabulation.

L'interaction clavier

Clés d’accès

Combinées ou en suivant la touche ALT, les touches d’accès permettent d’activer un contrôle à l’aide du clavier. ToolStrip prend en charge les clés d’accès explicites et implicites. La définition explicite utilise un caractère ampersand (&) qui précède la lettre. La définition implicite utilise un algorithme qui tente de trouver un élément correspondant en fonction de l’ordre des caractères d’une propriété Text donnée.

Touches de raccourci

Les touches de raccourci utilisées par un MenuStrip utilisent 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 du texte uniquement, par exemple afficher « Del » au lieu de « Supprimer ».

La touche ALT active la MenuStrip pointée par MainMenuStrip. À partir de là, Ctrl+Tab navigue entre les contrôles ToolStrip dans ToolStripPanels. La touche TAB et les touches de direction du pavé numérique naviguent entre les éléments d’un ToolStrip. Un algorithme spécial gère la navigation dans la région de dépassement de capacité. SPACEBAR sélectionne un ToolStripButton, ToolStripDropDownButtonou ToolStripSplitButton.

Focus et validation

Lorsqu'elles sont activées par la touche ALT, les touches MenuStrip ou ToolStrip ne prennent généralement pas et ne retirent pas non plus le focus du contrôle qui a actuellement le focus. S’il existe un contrôle hébergé dans le MenuStrip ou une liste déroulante de l’MenuStrip, le contrôle obtient le focus lorsque l’utilisateur appuie sur la touche TAB. En général, les événements GotFocus, LostFocus, Enteret Leave de MenuStrip ne sont peut-être pas déclenchés quand ils sont activés par le clavier. Dans ce cas, utilisez les événements MenuActivate et MenuDeactivate à la place.

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

Disposition

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

Dispositions de pile

L’empilement est l’agencement d’éléments le long des deux extrémités du ToolStrip. La liste suivante décrit les dispositions de pile.

Autres fonctionnalités des agencements en pile

Alignment détermine la fin du ToolStrip auquel l’élément est aligné.

Lorsque les éléments ne rentrent pas dans le ToolStrip, un bouton de débordement s’affiche automatiquement. Le paramètre de propriété Overflow détermine si un élément apparaît toujours dans la zone de dépassement de capacité, si nécessaire ou jamais.

Dans l'événement LayoutCompleted, vous pouvez inspecter la propriété Placement pour déterminer si un élément a été placé sur le menu principal ToolStrip, le menu débordement ToolStrip, ou s'il n'apparaît pas du tout. Les raisons courantes pour lesquelles un élément n’est pas affiché sont que l’élément ne correspond pas à la ToolStrip principale et que sa propriété Overflow a été définie sur Never.

Faites un ToolStrip mobile en le plaçant dans un ToolStripPanel et en définissant son GripStyle sur Visible.

Autres options de disposition

Les autres options de disposition sont Flow et Table.

Disposition du flux

La disposition Flow est la configuration par défaut pour ContextMenuStrip, ToolStripDropDownMenuet ToolStripOverflow. Il est similaire à la FlowLayoutPanel. Les caractéristiques de la disposition Flow sont les suivantes :

Disposition du tableau

Table disposition est la disposition par défaut pour StatusStrip. Il est similaire à TableLayoutPanel. Les caractéristiques de la disposition Flow sont les suivantes :

Élément de la barre d'outils

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

ToolStripItem est la classe de base abstraite pour tous les éléments qui entrent dans un ToolStrip. Le modèle objet suivant montre la hiérarchie d’héritage ToolStripItem.

Diagramme montrant le modèle objet ToolStripItem.

ToolStripItem classes héritent directement de ToolStripItem, ou héritent indirectement de ToolStripItem par ToolStripControlHost ou ToolStripDropDownItem.

Les contrôles ToolStripItem doivent être contenus dans un ToolStrip, un MenuStrip, un StatusStripou un 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 stock ToolStripItem et les conteneurs dans lesquels ils sont le mieux mis en valeur. Bien que n’importe quel élément ToolStrip puisse être hébergé dans n’importe quel conteneur dérivé de ToolStrip, ces éléments ont été conçus pour s’afficher le mieux dans les conteneurs suivants :

Note

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

Élément contenu Barre d'outils MenuStrip ContextMenuStrip Barre d'état 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

Bouton de la barre d'outils

ToolStripButton est le bouton pour ToolStrip. Vous pouvez l’afficher avec différents styles de bordure, et vous pouvez l’utiliser pour représenter et activer les états opérationnels. Vous pouvez également le définir pour avoir le focus par défaut.

ToolStripLabel

Le ToolStripLabel fournit des fonctionnalités d’étiquette dans les contrôles ToolStrip. Le ToolStripLabel est semblable à un ToolStripButton qui n'obtient pas le focus par défaut et qui ne s'affiche pas comme pressé ou surligné.

ToolStripLabel en tant qu’élément hébergé prend en charge les clés d’accès.

Utilisez les propriétés LinkColor, LinkVisitedet 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 incluent BorderStyle, BorderSideset Spring.

SéparateurDeBarreD'outils

Le ToolStripSeparator ajoute une ligne verticale ou horizontale à une barre d’outils ou un menu, en fonction de l’orientation. Il fournit un regroupement ou une distinction entre les éléments, tels que ceux d’un menu.

Vous pouvez ajouter une ToolStripSeparator au moment du design en la 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 de concepteur ou dans la méthode Add.

ToolStripControlHost

ToolStripControlHost est la classe de base abstraite pour ToolStripComboBox, ToolStripTextBoxet ToolStripProgressBar. ToolStripControlHost pouvez héberger d’autres contrôles, y compris des contrôles personnalisés, de deux façons :

  • Construisez un ToolStripControlHost avec une classe qui dérive de Control. Pour accéder entièrement au contrôle hébergé et aux propriétés, il est nécessaire de convertir la propriété Control en la classe réelle qu'elle représente.

  • Étendez ToolStripControlHost, et dans le constructeur sans paramètre de la classe héritée, appelez le constructeur de classe de base en passant une classe qui dérive de Control. Cette option vous permet d’encapsuler les méthodes de contrôle et les propriétés courantes pour faciliter l’accès dans un ToolStrip.

ToolStripComboBox

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

ToolStripTextBox

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

ToolStripProgressBar

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

ToolStripDropDownItem

ToolStripDropDownItem est la classe de base abstraite pour ToolStripMenuItem, ToolStripDropDownButtonet ToolStripSplitButton, qui peut héberger des éléments directement ou héberger des éléments supplémentaires dans un conteneur déroulant. Pour ce faire, définissez d'abord la propriété DropDown sur une ToolStripDropDown, puis définissez la propriété Items de l'ToolStripDropDown. Accédez directement à ces éléments déroulants via 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 l'agencement des colonnes pour les menus.

ToolStripDropDownButton

ToolStripDropDownButton ressemble à ToolStripButton, mais il affiche une zone déroulante lorsque l’utilisateur clique dessus. Masquez ou affichez la flèche déroulante en définissant la propriété ShowDropDownArrow. ToolStripDropDownButton héberge un ToolStripOverflowButton qui affiche les éléments qui dépassent le ToolStrip.

ToolStripSplitButton

ToolStripSplitButton combine les fonctionnalités du bouton et du 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 affiché sur le bouton.

Fonctionnalités génériques de ToolStripItem

ToolStripItem fournit les fonctionnalités et options génériques suivantes pour hériter des contrôles :

  • Événements de base

  • Gestion des images

  • Alignement

  • Relation de texte et d’image

  • Style d’affichage

Événements de base

Les contrôles de ToolStripItem reçoivent leurs propres événements de clic, de souris et de peinture, et peuvent également effectuer un prétraitement du clavier.

Gestion des images

Les propriétés Image, ImageAlign, ImageIndex, ImageKeyet ImageScaling concernent différents aspects de la gestion des images. Utilisez des images dans ToolStrip contrôles en définissant ces propriétés directement ou en définissant la propriété d’exécution uniquement ImageList.

La mise à l’échelle des images est déterminée par l’interaction des propriétés dans les deux ToolStrip et ToolStripItem, comme suit :

Alignement

La valeur de la propriété Alignment détermine la fin de la ToolStrip à laquelle un élément apparaît. La propriété Alignment fonctionne uniquement lorsque le style de disposition de l'ToolStrip est défini sur 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 les éléments apparaissent dans la collection Items. Pour modifier par programmation l’emplacement d’un élément, 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 de texte et d’image

La propriété TextImageRelation définit le positionnement relatif de l’image par rapport au texte d’un ToolStripItem. Les éléments qui n’ont pas d’image, de texte ou les deux sont traités comme des cas spéciaux afin que l'ToolStripItem n’affiche pas de point vide pour l’élément ou les éléments manquants.

Style d’affichage

DisplayStyle vous permet de définir les valeurs des propriétés Texte et Image d’un élément tout en affichant uniquement ce que vous souhaitez. Cela est généralement utilisé 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 différentes autres fonctionnalités sont les suivantes :

Voir aussi