Delen via


Architectuur van ToolStrip-besturingselementen

De klassen ToolStrip en ToolStripItem bieden een flexibel, uitbreidbaar systeem voor het weergeven van werkbalk-, status- en menu-items. Deze klassen bevinden zich allemaal in de System.Windows.Forms naamruimte en ze hebben allemaal een naam met het voorvoegsel 'ToolStrip' (zoals ToolStripOverflow) of met het achtervoegsel 'Strip' (zoals MenuStrip).

Werkbalk

In de volgende onderwerpen worden ToolStrip en de besturingselementen beschreven die ermee zijn afgeleid.

ToolStrip is de abstracte basisklasse voor MenuStrip, StatusStripen ContextMenuStrip. Het volgende objectmodel toont de ToolStrip overnamehiërarchie.

diagram met het objectmodel ToolStrip.

U kunt toegang hebben tot alle items van ToolStrip via de Items-verzameling. U kunt alle items in een ToolStripDropDownItem openen via de DropDownItems collectie. In een klasse die is afgeleid van ToolStrip, kunt u ook de eigenschap DisplayedItems gebruiken om alleen toegang te krijgen tot de items die momenteel worden weergegeven. Dit zijn de items die zich momenteel niet in een overloopmenu bevinden.

De volgende items zijn speciaal ontworpen om naadloos te werken met zowel ToolStripSystemRenderer als ToolStripProfessionalRenderer in alle richtingen. Ze zijn standaard beschikbaar tijdens het ontwerpen voor de controle ToolStrip:

MenuStrip is de container op het hoogste niveau die MainMenuvervangt. Het biedt ook belangrijke verwerking en meerdere MDI-functies (Document Interface). Functioneel werken ToolStripDropDownItem en ToolStripMenuItem samen met MenuStrip, hoewel ze zijn afgeleid van ToolStripItem.

De volgende items zijn speciaal ontworpen om naadloos te werken met zowel ToolStripSystemRenderer als ToolStripProfessionalRenderer in alle richtingen. Ze zijn standaard beschikbaar op ontwerptijdstip voor het controle-element MenuStrip.

StatusStrip

StatusStrip vervangt het besturingselement StatusBar. Speciale functies van StatusStrip zijn onder andere een aangepaste tabelindeling, ondersteuning voor de formaat- en verplaatsingsgrepen van het formulier en de eigenschap Spring, waardoor een ToolStripStatusLabel de beschikbare ruimte automatisch kan vullen.

De volgende items zijn speciaal ontworpen om naadloos te werken met zowel ToolStripSystemRenderer als ToolStripProfessionalRenderer in alle richtingen. Ze zijn standaard beschikbaar tijdens de ontwerpfase voor de besturing StatusStrip:

ContextmenuStrip

ContextMenuStrip vervangt ContextMenu. U kunt een ContextMenuStrip koppelen aan elk besturingselement en met de rechtermuisknop wordt automatisch het contextmenu (of snelmenu) weergegeven. U kunt een ContextMenuStrip programmatisch weergeven met behulp van de methode Show. ContextMenuStrip ondersteunt annuleerbare Opening- en Closing-gebeurtenissen voor het afhandelen van dynamische populatie- en meervoudig-kliksituaties. ContextMenuStrip ondersteunt afbeeldingen, status van menu-itemcontrole, tekst, toegangstoetsen, sneltoetsen en trapsgewijze menu's.

De volgende items zijn speciaal ontworpen om naadloos te werken met zowel ToolStripSystemRenderer als ToolStripProfessionalRenderer in alle richtingen. Ze zijn standaard beschikbaar op ontwerptijd voor het besturingselement ContextMenuStrip:

Algemene functies van ToolStrip

In de volgende onderwerpen worden functies en gedrag beschreven die algemeen zijn voor de ToolStrip en afgeleide besturingselementen.

Schilderij

U kunt op verschillende manieren custom painting uitvoeren in de ToolStrip-besturingselementen. Net als bij andere besturingselementen van Windows Forms, hebben zowel de ToolStrip als ToolStripItem overschrijfbare OnPaint-methoden en Paint-gebeurtenissen. Net als bij normaal schilderen is het coördinaatsysteem relatief ten opzichte van het clientgebied van het besturingselement, dat wil zeggen: de linkerbovenhoek van het besturingselement is 0, 0. De Paint gebeurtenis en OnPaint methode voor een ToolStripItem zich gedragen als andere controleverf-gebeurtenissen.

De ToolStrip controls bieden ook een fijnere toegang tot het renderen van de items en container via de ToolStripRenderer class, die overschrijfbare methoden heeft voor het weergeven van de achtergrond, itemachtergrond, itemafbeelding, itempijl, itemtekst en rand van de ToolStrip. De gebeurtenisargumenten voor deze methoden bevatten verschillende eigenschappen, zoals rechthoeken, kleuren en tekstindelingen die u naar wens kunt aanpassen.

Als u slechts een paar aspecten van de schildering van een item wilt aanpassen, overschrijft u meestal de ToolStripRenderer.

Als u een nieuw item schrijft en alle aspecten van het schilderij wilt beheren, overschrijft u de methode OnPaint. Vanuit OnPaintkunt u methoden uit de ToolStripRenderergebruiken.

De ToolStrip wordt standaard dubbel gebufferd, waarbij gebruik wordt gemaakt van de OptimizedDoubleBuffer instelling.

Ouderschap

Het concept van containereigendom en -hiërarchie is complexer in ToolStrip-besturingselementen dan in andere Windows Forms-containerbesturingselementen. Dit is nodig om dynamische scenario's te ondersteunen, zoals overschrijding, het delen van vervolgkeuzelijstitems over meerdere ToolStrip elementen, en om de aanmaak van een ContextMenuStrip vanuit een controle-element te ondersteunen.

In de volgende lijst worden leden beschreven die betrekking hebben op ouderschap en wordt het gebruik ervan uitgelegd.

  • OwnerItem heeft toegang tot het item dat de bron is van het keuzelijstitem. Dit is vergelijkbaar met SourceControl, maar in plaats van een besturingselement te retourneren, wordt een ToolStripItemgeretourneerd.

  • SourceControl bepaalt welk besturingselement de bron van de ContextMenuStrip is wanneer meerdere besturingselementen dezelfde ContextMenuStripdelen.

  • GetCurrentParent is een alleen-lezentoegangsbron voor de eigenschap Parent. Een ouder verschilt van een eigenaar doordat een ouder de geretourneerde huidige ToolStrip aangeeft waarin het item wordt weergegeven, wat zich mogelijk in het overloopgebied bevindt.

  • Owner retourneert de ToolStrip waarvan de verzameling Items de huidige ToolStripItembevat. Dit is de beste manier om te verwijzen naar ImageList of andere eigenschappen op het hoogste niveau ToolStrip zonder speciale code te schrijven om overloop te verwerken.

Gedrag van overgenomen besturingselementen

De volgende bedieningselementen worden vergrendeld wanneer ze worden gebruikt bij overerving:

Maak bijvoorbeeld een nieuwe Windows Forms-toepassing met behulp van een of meer bedieningselementen in de vorige lijst. Stel de toegangsmodificator van een of meer besturingselementen in op public of protecteden bouw vervolgens het project. Voeg een formulier toe dat wordt overgenomen van het eerste formulier en selecteer vervolgens een overgenomen besturingselement. Het besturingselement lijkt vergrendeld, alsof de toegangsmodificator privateis.

ToolStripContainer-ondersteuning voor overname

Het besturingselement ToolStripContainer ondersteunt beperkte overgenomen scenario's, vergelijkbaar met het volgende voorbeeld:

  1. Maak een nieuwe Windows Forms-toepassing.

  2. Voeg een ToolStripContainer toe aan het formulier.

  3. Stel de toegangsmodificator van ToolStripContainer in op public of protected.

  4. Voeg een combinatie van ToolStrip, MenuStripen ContextMenuStrip besturingselementen toe aan de ToolStripPanel regio's van de ToolStripContainer.

  5. Bouw het project.

  6. Voeg een formulier toe dat wordt overgenomen van het eerste formulier.

  7. Selecteer op het formulier de overgenomen ToolStripContainer.

Erfelijk gedrag van kindbesturingselementen

Nadat u de vorige stappen hebt voltooid, treedt het volgende overgenomen gedrag op:

  • In de ontwerpfunctie wordt het besturingselement weergegeven met een overgenomen pictogram.

  • De ToolStripPanel besturingselementen zijn vergrendeld; u kunt de inhoud ervan niet selecteren of opnieuw rangschiknen.

  • U kunt bedieningspanelen toevoegen aan de ToolStripContentPanel, de bedieningspanelen verplaatsen en ze onderliggende bedieningspanelen van de ToolStripContentPanelmaken.

  • De wijzigingen blijven bewaard nadat het formulier is gebouwd.

    Notitie

    Verwijder de toegangsmodifiers van alle ToolStripPanel-bedieningselementen die deel uitmaken van een ToolStripContainer. De toegangsmodifier van de ToolStripContainer bepaalt de hele besturing.

Gedeeltelijke vertrouwensrelatie

De beperkingen van ToolStrips onder gedeeltelijke vertrouwensrelatie zijn ontworpen om onbedoelde invoer van persoonlijke gegevens te voorkomen die kunnen worden gebruikt door onbevoegde personen of diensten. De beschermende maatregelen zijn als volgt:

  • ToolStripDropDown besturingselementen moeten AllWindows items in een ToolStripControlHostweergeven. Dit geldt zowel voor intrinsieke besturingselementen zoals ToolStripTextBox, ToolStripComboBoxen ToolStripProgressBar als voor door de gebruiker gemaakte besturingselementen. Als niet aan deze vereiste wordt voldaan, worden deze items niet weergegeven. Er wordt geen uitzondering opgeworpen.

  • Het instellen van de eigenschap AutoClose op false is niet toegestaan en de geannuleerde Closing gebeurtenisparameter wordt genegeerd. Dit maakt het onmogelijk om meer dan één toetsaanslag in te voeren zonder de vervolgkeuzelijst te sluiten. Als niet aan deze vereiste wordt voldaan, worden dergelijke items niet weergegeven. Er wordt geen uitzondering gegenereerd.

  • Veel van de toetsaanslaggebeurtenissen worden niet gegenereerd als ze optreden in andere gedeeltelijke vertrouwenscontexten dan AllWindows.

  • Toegangssleutels worden niet verwerkt wanneer AllWindows niet wordt verleend.

Gebruik

De volgende gebruikspatronen hebben invloed op ToolStrip lay-out, toetsenbordinteractie en gedrag van eindgebruikers:

  • Toegevoegd aan een ToolStripPanel

    De ToolStrip kan worden verplaatst binnen de ToolStripPanel en over ToolStripPanels. De eigenschap Dock wordt genegeerd en als de eigenschap Stretch is false, neemt de grootte van de ToolStrip toe naarmate items worden toegevoegd aan de ToolStripPanel. Normaal gesproken neemt de ToolStrip niet deel aan de tabvolgorde.

  • Gedokt

    De ToolStrip wordt in een vaste positie op één zijde van een container geplaatst en de grootte ervan breidt zich uit over de hele rand waaraan deze is bevestigd. Normaal gesproken neemt de ToolStrip niet deel aan de tabvolgorde.

  • Absoluut gepositioneerd

    De ToolStrip is net als andere besturingselementen, omdat deze wordt geplaatst door de eigenschap Location, een vaste grootte heeft en meestal deelneemt aan de tabvolgorde.

Toetsenbordinteractie

Toegangssleutels

In combinatie met of na de Alt-toets zijn toegangstoetsen één manier om een besturingselement te activeren met behulp van het toetsenbord. ToolStrip ondersteunt zowel expliciete als impliciete toegangssleutels. Expliciete definitie maakt gebruik van een en-teken (&) voorafgaand aan de letter. Impliciete definitie maakt gebruik van een algoritme dat probeert een overeenkomend item te vinden op basis van de volgorde van tekens in een bepaalde eigenschap Text.

Sneltoetsen

De sneltoetsen die door een MenuStrip worden gebruikt, gebruiken een combinatie van de Keys opsomming (die niet orderspecifiek is) om de sneltoets te definiëren. U kunt ook de eigenschap ShortcutKeyDisplayString gebruiken om alleen een sneltoets met tekst weer te geven, zoals 'Del' in plaats van 'Verwijderen'.

Met de Alt-toets wordt de MenuStrip geactiveerd waarnaar wordt verwezen door MainMenuStrip. Vanaf daar navigeert Ctrl+Tab tussen ToolStrip besturingselementen binnen ToolStripPanels. Met de Tab-toets en de pijltoetsen op het numerieke toetsenblok navigeert u tussen items in een ToolStrip. Een speciaal algoritme verwerkt navigatie in de overloopregio. De spatiebalk selecteert een ToolStripButton, ToolStripDropDownButtonof ToolStripSplitButton.

Focus en validatie

Wanneer de alt-toets wordt geactiveerd, neemt de MenuStrip of ToolStrip doorgaans de focus niet op van het besturingselement dat momenteel de focus heeft. Als er een besturingselement aanwezig is binnen de MenuStrip of een vervolgkeuzelijst van de MenuStrip, krijgt dat besturingselement de focus wanneer de gebruiker op de Tab-toets drukt. Over het algemeen worden de gebeurtenissen GotFocus, LostFocus, Enteren Leave van MenuStrip mogelijk niet opgeroepen wanneer ze door het toetsenbord worden geactiveerd. In dergelijke gevallen gebruikt u in plaats daarvan de gebeurtenissen MenuActivate en MenuDeactivate.

Standaard is CausesValidationfalse. Roep Validate expliciet aan op uw formulier om de validatie uit te voeren.

Indeling

U bepaalt ToolStrip indeling door een van de leden van ToolStripLayoutStyle te kiezen met de eigenschap LayoutStyle.

Stack-indelingen

Stapelen is het rangschikken van items naast elkaar aan beide uiteinden van de ToolStrip. In de volgende lijst worden de stackindelingen beschreven.

Andere functies van stack-indelingen

Alignment bepaalt het einde van de ToolStrip waarop het item is uitgelijnd.

Wanneer items niet binnen het ToolStrippassen, wordt automatisch een overloopknop weergegeven. De instelling van de eigenschap Overflow bepaalt of een item altijd, indien nodig, of nooit in het overloopgebied wordt weergegeven.

In de LayoutCompleted gebeurtenis kunt u de eigenschap Placement controleren om te bepalen of een item is geplaatst op de hoofd-ToolStrip, de overloop ToolStripof als het momenteel helemaal niet wordt weergegeven. De typische redenen waarom een item niet wordt weergegeven, zijn dat het item niet past op de hoofd-ToolStrip en de eigenschap Overflow is ingesteld op Never.

Maak een ToolStrip beweegbaar door het in een ToolStripPanel te plaatsen en de GripStyle in te stellen op Visible.

Andere indelingsopties

De andere indelingsopties zijn Flow en Table.

Stroomindeling

Flow indeling is de standaardindeling voor ContextMenuStrip, ToolStripDropDownMenuen ToolStripOverflow. Het is vergelijkbaar met de FlowLayoutPanel. De functies van Flow indeling zijn als volgt:

Tabelindeling

Table indeling is de standaardindeling voor StatusStrip. Het is vergelijkbaar met TableLayoutPanel. De functies van Flow indeling zijn als volgt:

ToolStripItem

In de volgende onderwerpen worden ToolStripItem en de besturingselementen beschreven die ermee zijn afgeleid.

ToolStripItem is de abstracte basisklasse voor alle items die naar een ToolStripgaan. Het volgende objectmodel toont de ToolStripItem overnamehiërarchie.

diagram met het objectmodel ToolStripItem.

ToolStripItem klassen rechtstreeks overnemen van ToolStripItemof indirect overnemen van ToolStripItem via ToolStripControlHost of ToolStripDropDownItem.

ToolStripItem besturingselementen moeten zijn opgenomen in een ToolStrip, MenuStrip, StatusStripof ContextMenuStrip en kunnen niet rechtstreeks aan een formulier worden toegevoegd. De verschillende containerklassen zijn ontworpen om een geschikte subset van ToolStripItem besturingselementen te bevatten.

De volgende tabel bevat de voorraadbesturingselementen ToolStripItem en de containers waarin ze het beste eruitzien. Hoewel elk ToolStrip item kan worden gehost in elke ToolStrip-afgeleide container, zijn deze items ontworpen om er het beste uit te zien in de volgende containers:

Notitie

ToolStripDropDown verschijnt niet in de ontwerpersgereedschap.

Ingesloten item ToolStrip MenuStrip ContextmenuStrip StatusStrip ToolStripDropDown
ToolStripButton Ja Nee Nee Nee Ja
ToolStripComboBox Ja Ja Ja Nee Ja
ToolStripSplitButton Ja Nee Nee Ja Ja
ToolStripLabel Ja Nee Nee Ja Ja
ToolStripSeparator Ja Ja Ja Nee Ja
ToolStripDropDownButton Ja Nee Nee Ja Ja
ToolStripTextBox Ja Ja Ja Nee Ja
ToolStripMenuItem Nee Ja Ja Nee Nee
ToolStripStatusLabel Nee Nee Nee Ja Nee
ToolStripProgressBar Ja Nee Nee Ja Nee
ToolStripControlHost Ja Ja Nee Ja Ja

ToolStripButton

ToolStripButton is het knopitem voor ToolStrip. U kunt deze weergeven met verschillende randstijlen en u kunt deze gebruiken om operationele statussen weer te geven en te activeren. U kunt het ook definiëren zodat het standaard de focus heeft.

ToolStripLabel

De ToolStripLabel biedt labelmogelijkheden in ToolStrip-besturingselementen. De ToolStripLabel lijkt op een ToolStripButton die standaard geen focus krijgt en die niet wordt weergegeven als gepusht of gemarkeerd.

ToolStripLabel als gehost item ondersteunt toegangssleutels.

Gebruik de eigenschappen LinkColor, LinkVisiteden LinkBehavior op een ToolStripLabel om koppelingsbeheer in een ToolStripte ondersteunen.

ToolStripStatusLabel

ToolStripStatusLabel is een versie van ToolStripLabel speciaal ontworpen voor gebruik in StatusStrip. De speciale kenmerken zijn onder andere BorderStyle, BorderSidesen Spring.

Scheidingslijn in werktuigenbalk

De ToolStripSeparator voegt een verticale of horizontale lijn toe aan een werkbalk of menu, afhankelijk van de oriëntatie. Het biedt groepering van of onderscheid tussen items, zoals items in een menu.

U kunt een ToolStripSeparator toevoegen tijdens het ontwerpproces door deze te kiezen in een vervolgkeuzelijst. U kunt echter ook automatisch een ToolStripSeparator maken door een afbreekstreepje (-) te typen in het ontwerpsjabloonknooppunt of in de methode Add.

ToolStripControlHost

ToolStripControlHost is de abstracte basisklasse voor ToolStripComboBox, ToolStripTextBoxen ToolStripProgressBar. ToolStripControlHost kunt op twee manieren andere besturingselementen hosten, waaronder aangepaste besturingselementen:

  • Maak een ToolStripControlHost met een klasse die is afgeleid van Control. Als u volledig toegang wilt krijgen tot het gehoste besturingselement en de gehoste eigenschappen, moet u de eigenschap Control terugzetten naar de werkelijke klasse die deze vertegenwoordigt.

  • Breid ToolStripControlHostuit en roep in de parameterloze constructor van de overgenomen klasse de basisklasseconstructor aan en geef een klasse door die is afgeleid van Control. Met deze optie kunt u veelgebruikte besturingsmethoden en eigenschappen verpakken voor eenvoudige toegang in een ToolStrip.

ToolStripComboBox

ToolStripComboBox is de ComboBox geoptimaliseerd voor hosting in een ToolStrip. Een subset van de eigenschappen en gebeurtenissen van het gehoste besturingselement wordt weergegeven op ToolStripComboBox niveau, maar het onderliggende besturingselement ComboBox is volledig toegankelijk via de eigenschap ComboBox.

ToolStripTextBox

ToolStripTextBox is de TextBox geoptimaliseerd voor hosting in een ToolStrip. Een subset van de eigenschappen en gebeurtenissen van het gehoste besturingselement wordt weergegeven op ToolStripTextBox niveau, maar het onderliggende besturingselement TextBox is volledig toegankelijk via de eigenschap TextBox.

ToolStripProgressBar

ToolStripProgressBar is de, voor hosting in een ToolStrip, geoptimaliseerde ProgressBar. Een subset van de eigenschappen en gebeurtenissen van het gehoste besturingselement wordt weergegeven op ToolStripProgressBar niveau, maar het onderliggende besturingselement ProgressBar is volledig toegankelijk via de eigenschap ProgressBar.

ToolStripDropDownItem

ToolStripDropDownItem is de abstracte basisklasse voor ToolStripMenuItem, ToolStripDropDownButtonen ToolStripSplitButton, die items rechtstreeks kan hosten of extra items in een vervolgkeuzelijst kan hosten. U doet dit door de eigenschap DropDown in te stellen op een ToolStripDropDown en de eigenschap Items van de ToolStripDropDownin te stellen. Open deze vervolgkeuzelijsten rechtstreeks via de eigenschap DropDownItems.

ToolStripMenuItem

ToolStripMenuItem is een ToolStripDropDownItem die werkt met ToolStripDropDownMenu en ContextMenuStrip voor het afhandelen van de speciale markering, indeling en kolomindeling voor menu's.

ToolStripDropDownButton

ToolStripDropDownButton lijkt op ToolStripButton, maar er wordt een vervolgkeuzelijst weergegeven wanneer de gebruiker erop klikt. U kunt de vervolgkeuzepijl verbergen of weergeven door de eigenschap ShowDropDownArrow in te stellen. ToolStripDropDownButton herbergt een ToolStripOverflowButton waarin items worden weergegeven die buiten de grenzen van de ToolStripvallen.

ToolStripSplitButton

ToolStripSplitButton combineert de functionaliteit van knoppen en vervolgkeuzeknoppen.

Gebruik de eigenschap DefaultItem om de Click gebeurtenis van het gekozen vervolgkeuze-item te synchroniseren met het item dat op de knop wordt weergegeven.

Algemene functies ToolStripItem

ToolStripItem biedt de volgende algemene functies en opties voor het overnemen van besturingselementen:

  • Kernevenementen

  • Verwerking van afbeeldingen

  • Uitlijning

  • Tekst- en afbeeldingsrelatie

  • Weergavestijl

Kernevenementen

ToolStripItem besturingselementen ontvangen hun eigen klik-, muis- en verfgebeurtenissen en kunnen ook een aantal toetsenbordvoorverwerking uitvoeren.

Verwerking van afbeeldingen

De eigenschappen Image, ImageAlign, ImageIndex, ImageKeyen ImageScaling hebben betrekking op verschillende aspecten van de verwerking van afbeeldingen. Gebruik afbeeldingen in ToolStrip controle-elementen door deze eigenschappen rechtstreeks in te stellen of door de alleen voor uitvoeringstijd ImageList eigenschap in te stellen.

Het schalen van afbeeldingen wordt als volgt bepaald door de interactie van eigenschappen in zowel ToolStrip als ToolStripItem:

Uitlijning

De waarde van de eigenschap Alignment bepaalt het einde van de ToolStrip waarop een item wordt weergegeven. De eigenschap Alignment werkt alleen wanneer de indelingsstijl van de ToolStrip is ingesteld op een van de stack-overloopwaarden.

Items worden op de ToolStrip geplaatst in de volgorde waarin de items worden weergegeven in de verzameling Items. Als u programmatisch wilt wijzigen waar een item is ingedeeld, gebruikt u de methode Insert om het item in de verzameling te verplaatsen. Met deze methode wordt het item verplaatst, maar wordt het niet gedupliceerd.

Tekst- en afbeeldingsrelatie

De eigenschap TextImageRelation definieert de relatieve plaatsing van de afbeelding met betrekking tot de tekst op een ToolStripItem. Items die geen afbeelding, tekst of beide bevatten, worden behandeld als speciale gevallen, zodat de ToolStripItem geen lege plek weergeeft voor het ontbrekende element of de ontbrekende elementen.

Weergavestijl

DisplayStyle kunt u de waarden van de eigenschappen Tekst en Afbeelding van een item instellen, waarbij alleen de door u gewenste elementen worden weergegeven. Dit wordt meestal gebruikt om alleen de weergavestijl te wijzigen wanneer hetzelfde item in een andere context wordt weergegeven.

Accessoireklassen

Klassen die verschillende andere functionaliteit bieden, zijn onder andere:

Zie ook