ToolStrip-kontrollarkitektur
Klasserna ToolStrip och ToolStripItem ger ett flexibelt, utökningsbart system för att visa verktygsfält, status och menyalternativ. Dessa klasser finns alla i System.Windows.Forms namnrymd och de namnges vanligtvis med prefixet "ToolStrip" (till exempel ToolStripOverflow) eller med suffixet "Strip" (till exempel MenuStrip).
ToolStrip
Följande avsnitt beskriver ToolStrip och de kontroller som härleds från den.
ToolStrip är den abstrakta basklassen för MenuStrip, StatusStripoch ContextMenuStrip. Följande objektmodell visar ToolStrip arvshierarkin.
Du kan komma åt alla objekt i en ToolStrip via Items-samlingen. Du kan komma åt alla objekt i en ToolStripDropDownItem via DropDownItems-samlingen. I en klass som härleds från ToolStripkan du också använda egenskapen DisplayedItems för att endast komma åt de objekt som visas för närvarande. Det här är de objekt som för närvarande inte finns i en spillmeny.
Följande objekt är särskilt utformade för att fungera sömlöst med både ToolStripSystemRenderer och ToolStripProfessionalRenderer i alla orienteringar. De är tillgängliga som standard vid designtillfället för ToolStrip kontroll:
MenuStrip
MenuStrip är den översta containern som ersätter MainMenu. Den innehåller även funktioner för nyckelhantering och flera funktioner för dokumentgränssnitt (MDI). Funktionellt fungerar ToolStripDropDownItem och ToolStripMenuItem tillsammans med MenuStrip, även om de härleds från ToolStripItem.
Följande objekt är särskilt utformade för att fungera sömlöst med både ToolStripSystemRenderer och ToolStripProfessionalRenderer i alla orienteringar. De är tillgängliga som standard vid designtillfället för MenuStrip kontroll:
StatusStrip
StatusStrip ersätter kontrollen StatusBar. Specialfunktioner i StatusStrip innehåller en anpassad tabelllayout, stöd för formulärets storleksändring och flyttgrepp samt egenskapen Spring
, vilket gör att en ToolStripStatusLabel kan fylla tillgängligt utrymme automatiskt.
Följande objekt är särskilt utformade för att fungera sömlöst med både ToolStripSystemRenderer och ToolStripProfessionalRenderer i alla orienteringar. De är tillgängliga som standard vid designtillfället för StatusStrip-kontrollen.
ContextMenuStrip
ContextMenuStrip ersätter ContextMenu. Du kan associera en ContextMenuStrip med valfri kontroll och ett högerklick visar automatiskt snabbmenyn. Du kan visa en ContextMenuStrip programmatiskt med hjälp av metoden Show. ContextMenuStrip stöder avbrytbara Opening- och Closing-händelser för att hantera dynamiska påfyllnings- och scenarier med flera klick. ContextMenuStrip stöder bilder, kontrolltillstånd för menyobjekt, text, åtkomstnycklar, genvägar och sammanhängande menyer.
Följande objekt är särskilt utformade för att fungera sömlöst med både ToolStripSystemRenderer och ToolStripProfessionalRenderer i alla orienteringar. De är tillgängliga som standard vid designtillfället för ContextMenuStrip-kontrollen.
ToolStrip Allmänna funktioner
I följande avsnitt beskrivs funktioner och beteenden som är allmänna för ToolStrip och härledda kontroller.
Målning
Du kan utföra anpassad målning i ToolStrip kontroller på flera sätt. Precis som med andra Windows Forms-kontroller har både ToolStrip och ToolStripItem åsidosättbara OnPaint
metoder och Paint
händelser. Precis som med vanlig målning är koordinatsystemet relativt kontrollens klientområde; det vill säga, det övre vänstra hörnet av kontrollen är 0, 0. Händelsen Paint
och metoden OnPaint
för en ToolStripItem fungerar som andra kontrollmålarhändelser.
De ToolStrip-kontrollerna ger också bättre åtkomst till återgivningen av objekten och behållaren via klassen ToolStripRenderer, som har överskrivbara metoder för att måla bakgrund, objektbakgrund, objektbild, objektpil, objekttext och kantlinje för ToolStrip. Händelseargumenten för dessa metoder visar flera egenskaper, till exempel rektanglar, färger och textformat som du kan justera efter behov.
Om du bara vill justera några aspekter av hur ett objekt målas åsidosätter du vanligtvis ToolStripRenderer.
Om du skriver ett nytt objekt och vill kontrollera alla aspekter av målningen åsidosätter du metoden OnPaint
. Från OnPaint
kan du använda metoder från ToolStripRenderer.
Som standard är ToolStrip dubbelbuffertad och utnyttjar inställningen OptimizedDoubleBuffer.
Föräldraskap
Begreppet containerägarskap och underordning är mer komplext i kontrollerna i ToolStrip än i andra Windows Forms-containerkontroller. Det är nödvändigt för att stödja dynamiska scenarier som spill, delning av listruteobjekt över flera ToolStrip objekt och för att stödja generering av en ContextMenuStrip från en kontroll.
I följande lista beskrivs medlemmar som är relaterade till föräldraskap och deras användning.
OwnerItem kommer åt det objekt som är källan till listrutan. Detta liknar SourceControl, men i stället för att returnera en kontroll returnerar den en ToolStripItem.
SourceControl avgör vilken kontroll som är källan till ContextMenuStrip när flera kontroller delar samma ContextMenuStrip.
GetCurrentParent är en skrivskyddad åtkomst till egenskapen Parent. En förälder skiljer sig från en ägare eftersom en förälder anger det returnerade aktuella ToolStrip där objektet visas, vilket kan vara i överflödesområdet.
Owner returnerar ToolStrip vars objektsamling innehåller den aktuella ToolStripItem. Det här är det bästa sättet att referera till ImageList eller andra egenskaper på den översta nivån ToolStrip utan att skriva särskild kod för att hantera spill.
Beteende för ärvda kontroller
Följande kontroller låses när de används i arv:
ToolStripPanel som innehåller panelerna i en ToolStripContainer och även enskilda ToolStripPanel kontroller.
Skapa till exempel ett nytt Windows Forms-program med hjälp av en eller flera av kontrollerna i föregående lista. Ange åtkomstmodifieraren för en eller flera kontroller till public
eller protected
och skapa sedan projektet. Lägg till ett formulär som ärver från det första formuläret och välj sedan en ärvd kontroll. Kontrollen verkar vara låst och fungerar som om dess åtkomstmodifierare var private
.
ToolStripContainer Stöd för arv
Kontrollen ToolStripContainer stöder begränsade ärvda scenarier, ungefär som i följande exempel:
Skapa ett nytt Windows Forms-program.
Lägg till en ToolStripContainer i formuläret.
Ange åtkomstmodifieraren för ToolStripContainer till
public
ellerprotected
.Lägg till valfri kombination av kontrollerna ToolStrip, MenuStripoch ContextMenuStrip i de ToolStripPanel regionerna i ToolStripContainer.
Skapa projektet.
Lägg till ett formulär som ärver från det första formuläret.
Välj den ärvda ToolStripContainer i formuläret.
Ärvt beteende hos barnkontroller
När du har slutfört föregående steg inträffar följande ärvda beteende:
I designern visas kontrollen med en ärvd ikon.
De ToolStripPanel kontrollerna är låsta. du kan inte välja eller ordna om innehållet.
Du kan lägga till kontroller i ToolStripContentPanel, flytta kontrollerna och göra dem till underordnade kontroller i ToolStripContentPanel.
Ändringarna sparas när formuläret har skapats.
Anteckning
Ta bort åtkomstmodifierarna från alla ToolStripPanel kontroller som ingår i en ToolStripContainer. Åtkomstmodifieraren för ToolStripContainer styr hela kontrollen.
Partiellt förtroende
Begränsningarna för ToolStrip
under delvis förtroende är utformade för att förhindra oavsiktlig inmatning av personlig information som kan användas av obehöriga personer eller tjänster. Skyddsåtgärderna är följande:
ToolStripDropDown
kontroller kräver AllWindows för att visa objekt i en ToolStripControlHost. Detta gäller både inbyggda kontroller som ToolStripTextBox, ToolStripComboBoxoch ToolStripProgressBar samt användarskapade kontroller. Om det här kravet inte uppfylls visas inte dessa objekt. Inget undantag kastas.Det är inte tillåtet att ställa in egenskapen AutoClose till
false
, och händelseparametern Closing, som kan annulleras, ignoreras. Detta gör det omöjligt att ange mer än en tangenttryckning utan att stänga listrutan. Om det här kravet inte uppfylls visas inte sådana objekt. Inget undantag kastas.Många tangenttryckningshanteringshändelser aktiveras inte om de inträffar i andra partiella förtroendekontexter än AllWindows.
Åtkomstnycklar bearbetas inte när AllWindows inte beviljas.
Användning
Följande användningsmönster har betydelse för ToolStrip layout, tangentbordsinteraktion och slutanvändarbeteende:
Ansluten i en ToolStripPanel
ToolStrip kan flyttas inom ToolStripPanel och mellan ToolStripPanels. Egenskapen
Dock
ignoreras och om egenskapen Stretch ärfalse
växer storleken på ToolStrip när objekt läggs till i ToolStripPanel. Vanligtvis deltar inte ToolStrip i tabbordningen.Dockad
ToolStrip placeras på ena sidan av en container i fast läge och dess storlek expanderas över hela kanten som den dockas till. Vanligtvis deltar inte ToolStrip i tabbordningen.
Absolut positionerad
Den ToolStrip är som andra kontroller, eftersom den placeras av egenskapen Location, har en fast storlek och vanligtvis deltar i tabbordningen.
Tangentbordsinteraktion
Åtkomstnycklar
I kombination med eller efter ALT-tangenten är åtkomstnycklar ett sätt att aktivera en kontroll med hjälp av tangentbordet.
ToolStrip stöder både explicita och implicita åtkomstnycklar. Explicit definition använder ett et-tecken (&) före bokstaven. Implicit definition använder en algoritm som försöker hitta ett matchande objekt baserat på ordningen på tecken i en viss Text
egenskap.
Kortkommandon
Kortkommandon som används av en MenuStrip använder en kombination av Keys-uppräkning (som inte är ordningsspecifik) för att definiera kortkommandot. Du kan också använda egenskapen ShortcutKeyDisplayString för att visa en genvägsnyckel med endast text, till exempel att visa "Del" i stället för "Ta bort".
Navigering
ALT-nyckeln aktiverar MenuStrip som pekas på av MainMenuStrip. Därifrån navigerar CTRL+TAB mellan ToolStrip kontroller inom ToolStripPanel
s. TABB-tangenten och piltangenterna på den numeriska knappsatsen navigerar mellan objekt i en ToolStrip. En särskild algoritm hanterar navigeringen i spillregionen. BLANKSTEG VÄLJER en ToolStripButton, ToolStripDropDownButtoneller ToolStripSplitButton.
Fokus och validering
När den aktiveras av ALT-tangenten, påverkar varken MenuStrip eller ToolStrip vanligtvis fokus på den kontroll som redan har fokus. Om det finns en kontroll i MenuStrip eller en listruta i MenuStrip, får kontrollen fokus när användaren trycker på TAB-tangenten. I allmänhet kanske GotFocus-, LostFocus-, Enter- och Leave-händelserna för MenuStrip inte uppstår när de aktiveras av tangentbordet. I sådana fall använder du händelserna MenuActivate och MenuDeactivate i stället.
Som standard är CausesValidationfalse
. Anropa Validate explicit i formuläret för att utföra verifieringen.
Layout
Du styr ToolStrip layout genom att välja en av medlemmarna i ToolStripLayoutStyle med egenskapen LayoutStyle.
Stacklayouter
Stapling är placeringen av objekt bredvid varandra i båda ändar av ToolStrip. I följande lista beskrivs stacklayouterna.
StackWithOverflow är standard. Den här inställningen gör att ToolStrip ändrar layouten automatiskt i enlighet med egenskapen Orientation för att hantera dra- och dockningsscenarier.
VerticalStackWithOverflow renderar de ToolStrip objekten bredvid varandra lodrätt.
HorizontalStackWithOverflow renderar de ToolStrip objekten bredvid varandra vågrätt.
Andra funktioner i stacklayouter
Alignment avgör slutet på den ToolStrip som objektet är justerat till.
När objekt inte får plats i ToolStripvisas automatiskt en spillknapp. Egenskapsinställningen Overflow avgör om ett objekt alltid visas i spillområdet, efter behov eller aldrig.
I den LayoutCompleted-händelsen kan du inspektera egenskapen Placement för att avgöra om ett objekt har placerats på huvudområdet ToolStrip, överflödesområdet ToolStripeller om det inte visas alls just nu. De vanligaste orsakerna till att ett objekt inte visas är att objektet inte fick plats på huvud-ToolStrip och dess egenskap Overflow har angetts till Never.
Gör en ToolStrip flyttbar genom att placera den i en ToolStripPanel och ange dess GripStyle till Visible.
Andra layoutalternativ
De andra layoutalternativen är Flow och Table.
Flödeslayout
Flow layout är standard för ContextMenuStrip, ToolStripDropDownMenuoch ToolStripOverflow. Det liknar FlowLayoutPanel. Funktionerna i Flow layout är följande:
Alla funktioner i FlowLayoutPanel exponeras av egenskapen LayoutSettings. Du måste omvandla klassen LayoutSettings till en FlowLayoutSettings-klass.
Du kan använda egenskaperna Dock och Anchor i koden för att justera objekten i raden.
Egenskapen Alignment ignoreras.
I händelsen LayoutCompleted kan du granska egenskapen Placement för att avgöra om ett objekt har placerats på huvud-ToolStrip eller inte passar.
Greppet återges inte och därför går det inte att flytta en ToolStrip i Flow layoutformat i en ToolStripPanel.
Knappen ToolStrip överflöd återges inte och Overflow ignoreras.
Tabelllayout
Table layout är standard för StatusStrip. Det liknar TableLayoutPanel. Funktionerna i Flow layout är följande:
Alla funktioner i TableLayoutPanel exponeras av egenskapen LayoutSettings. Du måste omvandla klassen LayoutSettings till en TableLayoutSettings-klass.
Du kan använda egenskaperna Dock och Anchor i koden för att justera objekten i tabellcellen.
Egenskapen Alignment ignoreras.
I den LayoutCompleted-händelsen kan du granska egenskapen Placement för att avgöra om ett objekt har placerats på huvud-ToolStrip eller om det inte fick plats.
Greppet återges inte och därför går det inte att flytta en ToolStrip i Table layoutformat i en ToolStripPanel.
Knappen ToolStrip överflöd återges inte och Overflow ignoreras.
ToolStripItem
Följande avsnitt beskriver ToolStripItem och de kontroller som härleds från den.
ToolStripItem är den abstrakta basklassen för alla objekt som går in i en ToolStrip. Följande objektmodell visar ToolStripItem arvshierarkin.
ToolStripItem klasser ärver antingen direkt från ToolStripItem, eller så ärver de indirekt från ToolStripItem via ToolStripControlHost eller ToolStripDropDownItem.
ToolStripItem kontroller måste finnas i ett ToolStrip, MenuStrip, StatusStripeller ContextMenuStrip och kan inte läggas till direkt i ett formulär. De olika containerklasserna är utformade för att innehålla en lämplig delmängd av ToolStripItem kontroller.
I följande tabell visas kontrollerna för lager ToolStripItem och de containrar där de passar bäst. Även om alla ToolStrip objekt kan finnas i valfri ToolStrip-härledd container, har dessa objekt utformats för att se bäst ut i följande containrar:
Not
ToolStripDropDown visas inte i designerverktygslådan.
Inneslutet objekt | ToolStrip | MenuStrip | ContextMenuStrip | StatusStrip | ToolStripDropDown |
---|---|---|---|---|---|
ToolStripButton | Ja | Nej | Nej | Nej | Ja |
ToolStripComboBox | Ja | Ja | Ja | Nej | Ja |
ToolStripSplitButton | Ja | Nej | Nej | Ja | Ja |
ToolStripLabel | Ja | Nej | Nej | Ja | Ja |
ToolStripSeparator | Ja | Ja | Ja | Nej | Ja |
ToolStripDropDownButton | Ja | Nej | Nej | Ja | Ja |
ToolStripTextBox | Ja | Ja | Ja | Nej | Ja |
ToolStripMenuItem | Nej | Ja | Ja | Nej | Nej |
ToolStripStatusLabel | Nej | Nej | Nej | Ja | Nej |
ToolStripProgressBar | Ja | Nej | Nej | Ja | Nej |
ToolStripControlHost | Ja | Ja | Nej | Ja | Ja |
Verktygsradsknapp
ToolStripButton är knappobjektet för ToolStrip. Du kan visa den med olika kantlinjeformat och du kan använda den för att representera och aktivera drifttillstånd. Du kan också definiera att den ska ha fokus som standard.
ToolStripLabel
ToolStripLabel innehåller etikettfunktioner i ToolStrip kontroller. ToolStripLabel är som en ToolStripButton som inte får fokus som standardinställning och som inte återges som nedtryckt eller markerad.
ToolStripLabel som värdbaserat objekt har stöd för åtkomstnycklar.
Använd egenskaperna LinkColor, LinkVisitedoch LinkBehavior på en ToolStripLabel för att stödja länkkontroll i en ToolStrip.
ToolStripStatusLabel
ToolStripStatusLabel är en version av ToolStripLabel som är särskilt utformad för användning i StatusStrip. Specialfunktionerna omfattar BorderStyle, BorderSidesoch Spring.
verktygsfältsseparator
ToolStripSeparator lägger till en lodrät eller vågrät linje i ett verktygsfält eller en meny, beroende på orienteringen. Det ger gruppering av eller skillnad mellan objekt, till exempel de på en meny.
Du kan lägga till en ToolStripSeparator under designfasen genom att välja den från en rullgardinsmeny. Du kan dock också automatiskt skapa en ToolStripSeparator genom att skriva ett bindestreck (-) i antingen designermallnoden eller i metoden Add.
ToolStripControlHost
ToolStripControlHost är den abstrakta basklassen för ToolStripComboBox, ToolStripTextBoxoch ToolStripProgressBar. ToolStripControlHost kan vara värd för andra kontroller, inklusive anpassade kontroller, på två sätt:
Skapa en ToolStripControlHost med en klass som härleds från Control. Om du vill få fullständig åtkomst till den värdbaserade kontrollen och egenskaperna måste du återställa egenskapen Control till den faktiska klass som den representerar.
Utöka ToolStripControlHost, och i den ärvda klassens parameterlösa konstruktor anropar du basklasskonstruktorn som skickar en klass som härleds från Control. Med det här alternativet kan du omsluta vanliga kontrollmetoder och egenskaper för enkel åtkomst i en ToolStrip.
ToolStripComboBox
ToolStripComboBox är ComboBox optimerad för värdtjänster i en ToolStrip. En delmängd av den värdbaserade kontrollens egenskaper och händelser exponeras på ToolStripComboBox nivå, men den underliggande ComboBox kontrollen är helt tillgänglig via egenskapen ComboBox.
ToolStripTextBox
ToolStripTextBox är TextBox optimerad för värdtjänster i en ToolStrip. En delmängd av den värdbaserade kontrollens egenskaper och händelser exponeras på ToolStripTextBox nivå, men den underliggande TextBox kontrollen är helt tillgänglig via egenskapen TextBox.
ToolStripProgressBar
ToolStripProgressBar är ProgressBar optimerad för värdtjänster i en ToolStrip. En delmängd av den värdbaserade kontrollens egenskaper och händelser exponeras på ToolStripProgressBar nivå, men den underliggande ProgressBar kontrollen är helt tillgänglig via egenskapen ProgressBar.
ToolStripDropDownItem
ToolStripDropDownItem är den abstrakta basklassen för ToolStripMenuItem, ToolStripDropDownButtonoch ToolStripSplitButton, som kan innehålla objekt direkt eller tillhandahålla ytterligare objekt i en rullgardinsbehållare. Det gör du genom att ange egenskapen DropDown till en ToolStripDropDown och ange egenskapen Items för ToolStripDropDown. Få åtkomst till dessa listruteobjekt direkt via egenskapen DropDownItems.
ToolStrip-menyalternativ
ToolStripMenuItem är en ToolStripDropDownItem som fungerar med ToolStripDropDownMenu och ContextMenuStrip för att hantera det speciella markerings-, layout- och kolumnarrangemanget för menyer.
ToolStripDropDownButton
ToolStripDropDownButton ser ut som ToolStripButton, men det visar ett nedrullningsbart område när användaren klickar på det. Dölj eller visa pilen för listrutan genom att ange den egenskapen ShowDropDownArrow. ToolStripDropDownButton har en ToolStripOverflowButton som visar element som överskrider ToolStrip.
Verktygsradssplitknapp
ToolStripSplitButton kombinerar knapp- och listrutefunktioner.
Använd egenskapen DefaultItem för att synkronisera Click händelsen för det valda listruteobjektet med det objekt som visas på knappen.
ToolStripItem Allmänna funktioner
ToolStripItem innehåller följande allmänna funktioner och alternativ för att ärva kontroller:
Viktiga händelser
Bildhantering
Justering
Text- och bildrelation
Visningsformat
Viktiga händelser
ToolStripItem kontroller får sina egna klick-, mus- och färghändelser och kan även utföra vissa tangentbordsförbearbetning.
Bildhantering
Egenskaperna Image, ImageAlign, ImageIndex, ImageKeyoch ImageScaling gäller olika aspekter av bildhantering. Använd bilder i ToolStrip-kontroller genom att ange dessa egenskaper direkt eller genom att ange egenskapen för endast körtid ImageList.
Bildskalning bestäms av interaktionen mellan egenskaper i både ToolStrip och ToolStripItemenligt följande:
ImageScalingSize är skalan för den slutliga avbildningen enligt kombinationen av avbildningens ImageScaling inställning och containerns AutoSize inställning.
Om AutoSize är
true
(standard) och ToolStripItemImageScaling är SizeToFitsker ingen bildskalning och ToolStrip storlek är det största objektet eller en föreskriven minsta storlek.Om AutoSize är
false
och ToolStripItemImageScaling är Nonesker varken avbildning eller ToolStrip skalning.
Justering
Värdet för egenskapen Alignment avgör slutet av ToolStrip där ett objekt visas. Egenskapen Alignment fungerar bara när layoutstilen för ToolStrip är inställd på ett av stacköverflödsvärdena.
Objekt placeras på ToolStrip i den ordning som objekten visas i samlingen Objekt. Använd metoden Insert för att flytta objektet i samlingen genom att programmatiskt ändra var ett objekt har lagts till. Den här metoden flyttar objektet men duplicerar det inte.
Text- och bildrelation
Egenskapen TextImageRelation definierar bildens relativa placering med avseende på texten på en ToolStripItem. Objekt som saknar en bild, text eller båda behandlas som specialfall så att ToolStripItem inte visar en tom plats för det saknade elementet eller elementen.
Visningsformat
DisplayStyle gör att du kan ange värdena för ett objekts text- och bildegenskaper samtidigt som du bara visar det du vill ha. Detta används vanligtvis för att endast ändra visningsformatet när samma objekt visas i en annan kontext.
Tillbehörsklasser
Klasser som tillhandahåller olika andra funktioner är:
ToolStripManager stöder ToolStrip-relaterade uppgifter för hela program, till exempel sammanslagning, inställningar och återgivningsalternativ.
ToolStripRenderer gör att du enkelt kan använda ett visst format eller tema på en ToolStrip.
ToolStripProfessionalRenderer skapar pennor och penslar baserat på en utbytbar färgtabell (ProfessionalColorTable).
ToolStripSystemRenderer använder systemfärger och ett platt visuellt format för ToolStrip program.
ToolStripContainer liknar SplitContainer. Den använder fyra dockade sidopaneler (instanser av ToolStripPanel) och en central panel (en instans av ToolStripContentPanel) för att skapa ett typiskt arrangemang. Du kan inte ta bort sidopanelerna, men du kan dölja dem. Du kan varken ta bort eller dölja den centrala panelen. Du kan ordna en eller flera ToolStrip, MenuStripeller StatusStrip kontroller i sidopanelerna, och du kan använda den centrala panelen för andra kontroller. ToolStripContentPanel ger också en metod för att integrera renderingsstöd i formulärets innehåll för att säkerställa ett enhetligt utseende. ToolStripContainer stöder inte flera dokumentgränssnitt (MDI).
ToolStripPanel ger utrymme för att flytta och ordna ToolStrip kontroller. Du kan bara använda en panel om du väljer det, och ToolStripPanel fungerar bra i MDI-scenarier.
Se även
.NET Desktop feedback