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 System.Windows.Forms de noms et elles sont généralement nommées avec le préfixe « ToolStrip » (par ToolStripOverflowexemple) ou avec le suffixe « Strip » (par exemple MenuStrip).

Barre d'outils

Les rubriques suivantes décrivent ToolStrip et les contrôles qui dérivent de celui-ci.

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 dans une ToolStrip via la collection Items. Vous pouvez accéder à tous les éléments dans une ToolStripDropDownItem via la collection DropDownItems. Dans une classe dérivée de ToolStrip, vous pouvez également utiliser la DisplayedItems propriété 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 sont spécifiquement conçus pour fonctionner en toute transparence avec ToolStripSystemRenderer et ToolStripProfessionalRenderer dans toutes les orientations. Elles sont disponibles par défaut au temps de conception 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 travaillent avec MenuStrip, bien qu’ils soient dérivés de ToolStripItem.

Les éléments suivants sont spécifiquement conçus pour fonctionner en toute transparence avec ToolStripSystemRenderer et ToolStripProfessionalRenderer dans toutes les orientations. Elles sont disponibles par défaut au temps de conception pour le contrôle MenuStrip.

Barre d'état

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

Les éléments suivants sont spécifiquement conçus pour fonctionner en toute transparence avec ToolStripSystemRenderer et ToolStripProfessionalRenderer dans toutes les orientations. Elles sont disponibles par défaut au temps de conception 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 de raccourci). Vous pouvez afficher un élément de manière programmatique à l’aide de la méthode ContextMenuStrip. ContextMenuStrip prend en charge les événements Opening et Closing annulables 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 en toute transparence avec ToolStripSystemRenderer et ToolStripProfessionalRenderer dans toutes les orientations. Elles sont disponibles par défaut au temps de conception 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 ToolStrip et des contrôles dérivés.

Peinture

Vous pouvez effectuer un rendu personnalisé dans les contrôles ToolStrip de plusieurs façons. Comme avec d’autres contrôles Windows Forms, les méthodes ToolStrip, ainsi que les événements ToolStripItem, des OnPaint et Paint peuvent être substitués. Comme pour une peinture traditionnelle, le système de coordonnées est relatif à la zone client du contrôle, c’est-à-dire que le coin supérieur gauche du contrôle 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 ToolStrip contrôles fournissent également un accès plus précis au rendu des éléments et du conteneur via la classe ToolStripRenderer, qui offre 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 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 que vous souhaitez contrôler tous les aspects de la peinture, remplacez la OnPaint méthode. Depuis l'intérieur OnPaint, vous pouvez utiliser des méthodes du ToolStripRenderer.

Par défaut, le ToolStrip est à double tampon, en tirant parti du paramètre OptimizedDoubleBuffer.

Parentalité

Le concept de propriété et de parenté du conteneur est plus complexe dans les contrôles de conteneur ToolStrip que dans d'autres contrôles de conteneur Windows Forms. Cela est nécessaire pour soutenir des scénarios dynamiques tels que le dépassement de capacité, le partage d’éléments déroulants sur plusieurs ToolStrip éléments, et de soutenir la génération d’un ContextMenuStrip à partir d'un élément de 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 du ContextMenuStrip lorsqu'il y a plusieurs contrôles qui partagent le même ContextMenuStrip.

  • GetCurrentParent est un accesseur en lecture seule de la propriété Parent. Un parent diffère d’un propriétaire en ce qu’il indique le courant ToolStrip retourné où 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 du meilleur moyen de référencer ImageList ou d’autres propriétés dans le niveau ToolStrip 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é, se comporte comme si son modificateur d’accès était private.

Support d'héritage de ToolStripContainer

Le ToolStripContainer contrôle 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 sur ToolStripContainerpublic ou protected.

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

  5. Construisez le projet.

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

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

Comportement hérité des contrôles enfants

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

  • Dans le concepteur, le contrôle s’affiche avec une icône héritée.

  • Les ToolStripPanel contrôles 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 les rendre des contrôles enfants du ToolStripContentPanel.

  • Vos modifications persistent après avoir généré le formulaire.

    Remarque

    Supprimez les modificateurs d’accès de tous les ToolStripPanel contrôles qui font partie d’un ToolStripContainer. Le modificateur d’accès de ToolStripContainer régit l'ensemble du contrôle.

Confiance partielle

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

  • ToolStripDropDown contrôles nécessitent AllWindows pour afficher des éléments dans un ToolStripControlHost. Cela s’applique aux deux contrôles intrinsèques tels que ToolStripTextBox, ToolStripComboBoxainsi ToolStripProgressBar 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 générée.

  • La définition de la AutoClose propriété à false n’est pas autorisée et le paramètre d’événement annulable Closing est ignoré. Cela rend impossible la saisie de plusieurs frappes sans fermer l'élément de liste déroulante. Si cette exigence n’est pas remplie, ces éléments ne sont pas affichés. Aucune exception n’est généré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 une incidence sur ToolStrip la disposition, l’interaction clavier et le comportement de l’utilisateur final :

  • Rejoint dans un ToolStripPanel

    Le ToolStrip peut être repositionné à l’intérieur du ToolStripPanel et à travers les ToolStripPanel. La propriété Dock est ignorée, et si la propriété Stretch est false, la taille de ToolStrip augmente à mesure que des éléments sont ajoutés à ToolStripPanel. Généralement, le ToolStrip ne participe pas à la séquence de tabulation.

  • Ancré

    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 attaché. Généralement, le ToolStrip ne participe pas à la séquence de tabulation.

  • positionnement absolu

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

Interaction avec le 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é donnée Text .

Touches de raccourci

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

La touche ALT active le MenuStrip pointé par MainMenuStrip. À partir de là, CTRL+TAB navigue entre ToolStrip contrôles dans ToolStripPanel. 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’elle est activée par la touche ALT, ni MenuStrip ni ToolStrip ne prennent ni ne suppriment généralement le focus du contrôle qui a actuellement le focus. S’il existe un contrôle hébergé dans le MenuStrip ou dans une liste déroulante du MenuStrip, le contrôle obtient le focus lorsque l’utilisateur appuie sur la touche TAB. En règle générale, 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 ce cas, utilisez plutôt les événements MenuActivate et MenuDeactivate.

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

Mise en page

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 à chaque extrémité du ToolStrip. La liste suivante décrit les dispositions de pile.

D'autres fonctionnalités des mises en page empilées

Alignment détermine la fin de l’élément ToolStrip à laquelle l’élément est aligné.

Lorsque les éléments ne s’intègrent pas dans le ToolStrip, un bouton de débordement s’affiche automatiquement. Le Overflow paramètre de propriété 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é dans le conteneur principal ToolStrip, dans le débordement ToolStrip, ou s’il n’est pas affiché du tout actuellement. Les raisons courantes pour lesquelles un élément n’est pas affiché sont que l’élément ne correspond pas à la valeur principale ToolStrip et sa Overflow propriété a été définie sur Never.

Rendez un ToolStrip mobile en le mettant dans un ToolStripPanel et en réglant son GripStyle sur Visible.

Autres options de disposition

Les autres options de disposition sont Flow et Table.

Disposition du flux

La disposition de Flow est la valeur par défaut pour ContextMenuStrip, ToolStripDropDownMenu et ToolStripOverflow. Il est similaire au FlowLayoutPanel. Les caractéristiques de la disposition Flow sont les suivantes :

Disposition du tableau

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

ToolStripItem

Les rubriques suivantes décrivent ToolStripItem et les contrôles qui dérivent de celui-ci.

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.

ToolStripItemles classes héritent directement de ToolStripItem, ou elles héritent indirectement de ToolStripItem via ToolStripControlHost ou ToolStripDropDownItem.

ToolStripItem Les contrôles doivent être contenus dans un 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 ToolStripItem contrôles.

Le tableau suivant répertorie les contrôles par défaut ToolStripItem et les conteneurs dans lesquels ils s'adaptent le mieux. Bien que n’importe quel ToolStrip élément puisse être hébergé dans n’importe quel ToolStripconteneur dérivé, ces éléments ont été conçus pour s’afficher le mieux dans les conteneurs suivants :

Remarque

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 barre d'outils

ToolStripButton est l’élément de 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

La ToolStripLabel fournit la fonctionnalité d'étiquette dans les contrôles ToolStrip. Le ToolStripLabel est comme un ToolStripButton qui n’obtient pas le focus par défaut et qui ne s’affiche ni comme pressé ni comme mis en surbrillance.

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

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

ToolStripStatusLabel

ToolStripStatusLabel est une version ToolStripLabel conçue spécifiquement pour une utilisation dans StatusStrip. Les caractéristiques spéciales incluent BorderStyle, BorderSideset Spring.

ToolStripSeparator

Ajoute ToolStripSeparator 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 valeur 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 du modèle de concepteur ou dans la méthode Add.

ToolStripControlHost

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

  • Construire un ToolStripControlHost à partir d'une classe dérivant de Control. Pour accéder pleinement au contrôle hébergé et aux propriétés, vous devez convertir la propriété Control en la classe réelle qu'elle représente.

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

ToolStripComboBox

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

ToolStripTextBox

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

ToolStripProgressBar

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

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 la propriété DropDown à ToolStripDropDown et définissez la propriété Items de ToolStripDropDown. Accédez directement à ces éléments déroulants via la DropDownItems propriété.

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.

Bouton déroulant de la barre d'outils

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 ShowDropDownArrow propriété. ToolStripDropDownButton contient un ToolStripOverflowButton qui affiche les éléments débordant de ToolStrip.

ToolStripSplitButton

ToolStripSplitButton combine les fonctionnalités de bouton et de bouton déroulant.

Utilisez la DefaultItem propriété 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érales 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

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

Gestion des images

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

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 Alignment propriété détermine la fin de l’élément ToolStrip à laquelle un élément apparaît. La Alignment propriété fonctionne uniquement lorsque le style de disposition du fichier ToolStrip est défini sur l’une des valeurs de dépassement de capacité de la pile.

Les éléments sont placés dans l’ordre ToolStrip dans lequel les éléments apparaissent dans la collection Items. Pour modifier par programmation l’emplacement d’un élément, utilisez la Insert méthode 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 TextImageRelation propriété définit le placement 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’élément ToolStripItem ou les éléments manquants n’affiche pas de point vide.

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