Dela via


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.

diagram som visar ToolStrip-objektmodellen.

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 ä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 OnPaintkan 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:

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 protectedoch 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:

  1. Skapa ett nytt Windows Forms-program.

  2. Lägg till en ToolStripContainer i formuläret.

  3. Ange åtkomstmodifieraren för ToolStripContainer till public eller protected.

  4. Lägg till valfri kombination av kontrollerna ToolStrip, MenuStripoch ContextMenuStrip i de ToolStripPanel regionerna i ToolStripContainer.

  5. Skapa projektet.

  6. Lägg till ett formulär som ärver från det första formuläret.

  7. 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:

Partiellt förtroende

Begränsningarna för ToolStripunder 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 är falsevä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".

ALT-nyckeln aktiverar MenuStrip som pekas på av MainMenuStrip. Därifrån navigerar CTRL+TAB mellan ToolStrip kontroller inom ToolStripPanels. 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.

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:

Tabelllayout

Table layout är standard för StatusStrip. Det liknar TableLayoutPanel. Funktionerna i Flow layout är följande:

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.

diagram som visar ToolStripItem-objektmodellen.

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:

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:

Se även