Udostępnij za pośrednictwem


Architektura kontrolki ToolStrip

Klasy ToolStrip i ToolStripItem zapewniają elastyczny, rozszerzalny system wyświetlania elementów paska narzędzi, stanu i menu. Wszystkie te klasy są zawarte w przestrzeni nazw System.Windows.Forms i są one zwykle nazywane prefiksem "ToolStrip" (takim jak ToolStripOverflow) lub sufiksem "Strip" (na przykład MenuStrip).

ToolStrip

W poniższych tematach opisano ToolStrip i elementy sterujące pochodzące z niego.

ToolStrip jest abstrakcyjną klasą bazową dla MenuStrip, StatusStripi ContextMenuStrip. Poniższy model obiektowy przedstawia ToolStrip w hierarchii dziedziczenia.

Diagram przedstawiający model obiektów ToolStrip.

Dostęp do wszystkich elementów w ToolStrip można uzyskać za pośrednictwem kolekcji Items. Dostęp do wszystkich elementów w ToolStripDropDownItem można uzyskać za pośrednictwem kolekcji DropDownItems. W klasie pochodzącej z ToolStripmożna również użyć właściwości DisplayedItems, aby uzyskać dostęp tylko do tych elementów, które są aktualnie wyświetlane. Są to elementy, które w tej chwili nie znajdują się w menu przepełnienia.

Poniższe elementy zostały specjalnie zaprojektowane tak, aby bezproblemowo współdziałały zarówno z ToolStripSystemRenderer, jak i ToolStripProfessionalRenderer we wszystkich orientacjach. Są one domyślnie dostępne w czasie projektowania dla kontrolki ToolStrip:

MenuStrip to kontener najwyższego poziomu, który zastępuje MainMenu. Zapewnia również obsługę kluczy i wiele funkcji interfejsu dokumentu (MDI). Funkcjonalnie ToolStripDropDownItem i ToolStripMenuItem współpracują z MenuStrip, chociaż pochodzą one z ToolStripItem.

Poniższe elementy zostały specjalnie zaprojektowane tak, aby bezproblemowo współdziałały zarówno z ToolStripSystemRenderer, jak i ToolStripProfessionalRenderer we wszystkich orientacjach. Są one domyślnie dostępne w czasie projektowania dla kontrolki MenuStrip:

StatusStrip

StatusStrip zastępuje kontrolkę StatusBar. Specjalne funkcje StatusStrip obejmują niestandardowy układ tabeli, obsługę uchwytów do zmiany rozmiaru i przesuwania formularza oraz właściwość Spring, która umożliwia ToolStripStatusLabel automatyczne wypełnienie dostępnej przestrzeni.

Poniższe elementy zostały specjalnie zaprojektowane tak, aby bezproblemowo współdziałały zarówno z ToolStripSystemRenderer, jak i ToolStripProfessionalRenderer we wszystkich orientacjach. Są one domyślnie dostępne w czasie projektowania dla kontrolki StatusStrip:

ContextMenuStrip

ContextMenuStrip zastępuje ContextMenu. Można skojarzyć ContextMenuStrip z dowolną kontrolką, a kliknięcie prawym przyciskiem myszy automatycznie wyświetla menu kontekstowe (lub menu skrótów). Programowo można wyświetlić ContextMenuStrip przy użyciu metody Show. ContextMenuStrip obsługuje anulowalne zdarzenia Opening i Closing, aby poradzić sobie z dynamicznym populacjami i scenariuszami wielokrotnego kliknięcia. ContextMenuStrip obsługuje obrazy, stan sprawdzania elementu menu, tekst, klucze dostępu, skróty i kaskadowe menu.

Poniższe elementy zostały specjalnie zaprojektowane tak, aby bezproblemowo współdziałały zarówno z ToolStripSystemRenderer, jak i ToolStripProfessionalRenderer we wszystkich orientacjach. Są one domyślnie dostępne w czasie projektowania dla kontrolki ContextMenuStrip:

ToolStrip — funkcje ogólne

W poniższych tematach opisano funkcje i zachowanie uniwersalne dla ToolStrip i pochodnych kontrolek.

Malarstwo

Niestandardowe malowanie można wykonywać na kilka sposobów za pomocą kontrolek ToolStrip. Podobnie jak w przypadku innych kontrolek Windows Forms, zarówno ToolStrip, jak i ToolStripItem mają zastępowalne metody OnPaint i zdarzenia Paint. Podobnie jak w przypadku zwykłego malowania, układ współrzędnych jest powiązany z obszarem klienta kontrolki; oznacza to, że lewy górny róg kontrolki to 0, 0. Zdarzenie Paint oraz metoda OnPaint dla ToolStripItem zachowują się jak inne zdarzenia związane z rysowaniem kontrolki.

Kontrolki ToolStrip umożliwiają bardziej precyzyjne dostosowanie renderowania elementów i kontenera przez klasę ToolStripRenderer, która ma zastępowalne metody rysowania tła, tła elementu, obrazu elementu, strzałki elementu, tekstu elementu oraz obramowania ToolStrip. Argumenty zdarzeń dla tych metod uwidaczniają kilka właściwości, takich jak prostokąty, kolory i formaty tekstu, które można dostosować zgodnie z potrzebami.

Aby dostosować tylko kilka aspektów sposobu malowania elementu, zazwyczaj zastępujesz ToolStripRenderer.

Jeśli piszesz nowy element i chcesz kontrolować wszystkie aspekty obrazu, przesłoń metodę OnPaint. Z poziomu OnPaintmożna użyć metod z ToolStripRenderer.

Domyślnie ToolStrip jest dwukrotnie buforowany, korzystając z ustawienia OptimizedDoubleBuffer.

Rodzicielstwo

Koncepcja własności kontenera i elementu nadrzędnego jest bardziej złożona w ToolStrip kontrolkach niż w innych kontrolkach kontenera Windows Forms. Jest to niezbędne do obsługi dynamicznych scenariuszy, takich jak przepełnienie, udostępnianie elementów rozwijanych w wielu elementach ToolStrip, a także do wspierania generowania ContextMenuStrip za pomocą kontrolki.

Poniższa lista opisuje członków związanych z rodzicielstwem i objaśnia ich użycie.

  • OwnerItem uzyskuje dostęp do elementu, który jest źródłem elementu z listy rozwijanej. Jest to podobne do SourceControl, ale zamiast zwracać kontrolkę, zwraca ToolStripItem.

  • SourceControl określa, która kontrolka jest źródłem ContextMenuStrip, gdy wiele kontrolek ma ten sam ContextMenuStrip.

  • GetCurrentParent jest akcesorem tylko do odczytu właściwości Parent. Rodzic różni się od właściciela tym, że rodzic wskazuje bieżący zwrócony ToolStrip, w którym element jest wyświetlany, co może oznaczać, że znajduje się on w obszarze przepełnienia.

  • Owner zwraca ToolStrip, którego kolekcja Items zawiera bieżącą ToolStripItem. Jest to najlepszy sposób na odniesienie się do ImageList lub innych właściwości w najwyższym poziomie ToolStrip bez konieczności pisania specjalnego kodu do obsługi przepełnienia.

Zachowanie odziedziczonych kontrolek

Następujące kontrolki są blokowane za każdym razem, gdy są używane w dziedziczeniu:

Na przykład utwórz nową aplikację Windows Forms przy użyciu co najmniej jednej kontrolki na poprzedniej liście. Ustaw modyfikator dostępu co najmniej jednej kontrolki na public lub protected, a następnie skompiluj projekt. Dodaj formularz, który dziedziczy z pierwszego formularza, a następnie wybierz dziedziczoną kontrolkę. Kontrolka jest zablokowana, zachowuje się tak, jakby jej modyfikator dostępu był private.

ToolStripContainer — obsługa dziedziczenia

Kontrolka ToolStripContainer obsługuje ograniczone scenariusze dziedziczone, podobnie jak w poniższym przykładzie:

  1. Utwórz nową aplikację Windows Forms.

  2. Dodaj ToolStripContainer do formularza.

  3. Ustaw modyfikator dostępu ToolStripContainer na public lub protected.

  4. Dodaj dowolną kombinację kontrolek ToolStrip, MenuStripi ContextMenuStrip do regionów ToolStripPanelToolStripContainer.

  5. Skompiluj projekt.

  6. Dodaj formularz dziedziczony z pierwszego formularza.

  7. Wybierz dziedziczone ToolStripContainer w formularzu.

Dziedziczone zachowanie kontrolek podrzędnych

Po wykonaniu poprzednich kroków następuje następujące zachowanie dziedziczone:

Zaufanie częściowe

Ograniczenia ToolStripw ramach częściowego zaufania mają na celu zapobieganie niezamierzonemu wprowadzeniu danych osobowych, które mogłyby zostać wykorzystane przez nieautoryzowane osoby lub usługi. Środki ochronne są następujące:

  • ToolStripDropDown kontrolki wymagają AllWindows, aby wyświetlać elementy w ToolStripControlHost. Dotyczy to zarówno kontrolek wewnętrznych, takich jak ToolStripTextBox, ToolStripComboBoxi ToolStripProgressBar, jak i kontrolek utworzonych przez użytkownika. Jeśli to wymaganie nie zostanie spełnione, te elementy nie są wyświetlane. Nie jest zgłaszany żaden wyjątek.

  • Ustawienie właściwości AutoClose na wartość false jest niedozwolone, a parametr zdarzenia z możliwością anulowania Closing jest ignorowany. Uniemożliwia to wprowadzanie więcej niż jednego naciśnięcia klawisza bez zamknięcia elementu listy rozwijanej. Jeśli to wymaganie nie zostanie spełnione, takie elementy nie są wyświetlane. Nie jest zgłaszany żaden wyjątek.

  • Wiele zdarzeń związanych z obsługą naciśnięć klawiszy nie zostanie zgłoszonych, jeśli wystąpią w kontekstach zaufania o ograniczonym dostępie innych niż AllWindows.

  • Klucze dostępu nie są przetwarzane, gdy nie przyznano AllWindows.

Użycie

Następujące wzorce użycia mają wpływ na układ ToolStrip, interakcję z klawiaturą i zachowanie użytkownika końcowego:

  • Dołączono do ToolStripPanel

    ToolStrip można przemieścić w obrębie ToolStripPanel i pomiędzy ToolStripPanel. Właściwość Dock jest ignorowana, a jeśli właściwość Stretch jest false, rozmiar ToolStrip rośnie w miarę dodawania elementów do ToolStripPanel. Zazwyczaj ToolStrip nie uczestniczy w kolejności tabulacji.

  • Zadokowany

    ToolStrip znajduje się po jednej stronie pojemnika w stałej pozycji, a jego rozmiar rozciąga się na całej krawędzi, do której jest przytwierdzony. Zazwyczaj ToolStrip nie uczestniczy w kolejności tabulacji.

  • Bezwzględnie rozmieszczone

    ToolStrip jest podobna do innych kontrolek, w tym, że jest umieszczana przez właściwość Location, ma stały rozmiar i zazwyczaj uczestniczy w kolejności tabulacji.

Interakcja z klawiaturą

Klucze dostępu

W połączeniu z klawiszem ALT lub następującym po nim, klawisze dostępu są jednym ze sposobów na aktywowanie kontrolki przy użyciu klawiatury. ToolStrip obsługuje zarówno jawne, jak i niejawne klucze dostępu. Definicja jawna używa znaku ampersand (&) poprzedzającego literę. Niejawna definicja używa algorytmu, który próbuje znaleźć pasujący element na podstawie kolejności znaków w danej właściwości Text.

Klawisze skrótów

Klucze skrótów używane przez MenuStrip stosują kombinację wyliczenia Keys (które nie jest zależne od kolejności), aby zdefiniować skrót. Możesz również użyć właściwości ShortcutKeyDisplayString, aby wyświetlić klawisz skrótu tylko jako tekst, na przykład wyświetlając "Del" zamiast "Usuń".

Klawisz ALT aktywuje element MenuStrip wskazywany przez MainMenuStrip. W tym miejscu ctrl+TAB przechodzi między kontrolkami ToolStrip w ToolStripPanels. Klawisz TAB i klawisze strzałek na klawiaturze numerycznej nawigują między elementami w ToolStrip. Specjalny algorytm obsługuje nawigację w regionie przepełnienia. Spacja wybiera ToolStripButton, ToolStripDropDownButtonlub ToolStripSplitButton.

Koncentracja uwagi i walidacja

Po aktywowaniu klawiszem ALT, MenuStrip lub ToolStrip zazwyczaj nie zyskują ani nie odejmują fokusu z kontrolki, która aktualnie ma fokus. Jeśli w MenuStrip lub na liście rozwijanej MenuStripistnieje kontrolka hostowana, kontrolka zyskuje fokus, gdy użytkownik naciska TAB. Ogólnie rzecz biorąc, zdarzenia GotFocus, LostFocus, Enteri Leave dotyczące MenuStrip mogą nie być wywoływane, gdy są uruchamiane za pomocą klawiatury. W takich przypadkach należy zamiast tego użyć zdarzeń MenuActivate i MenuDeactivate.

Domyślnie CausesValidation jest false. Wywołaj Validate jawnie na formularzu, aby przeprowadzić walidację.

Układ

Układ ToolStrip można kontrolować, wybierając jeden z elementów członkowskich ToolStripLayoutStyle z właściwością LayoutStyle.

Układy stosu

Układanie polega na ustawianiu elementów obok siebie na obu końcach ToolStrip. Poniższa lista opisuje układy stosu.

Inne funkcje układów stosów

Alignment określa koniec ToolStrip, do którego element jest wyrównany.

Gdy elementy nie mieszczą się w ToolStrip, zostanie automatycznie wyświetlony przycisk przepełnienia. Ustawienie właściwości Overflow określa, czy element jest zawsze wyświetlany w obszarze przepełnienia, w razie potrzeby, czy nigdy.

W zdarzeniu LayoutCompleted można sprawdzić właściwość Placement, aby określić, czy element został umieszczony na głównym ToolStrip, na przepełnieniowym ToolStriplub jeśli w ogóle nie jest on wyświetlany. Typowe przyczyny, dla których element nie jest wyświetlany, to to, że element nie pasuje do głównego ToolStrip, a jego właściwość Overflow została ustawiona na wartość Never.

Utwórz ToolStrip ruchomy, umieszczając go w ToolStripPanel i ustawiając GripStyle na Visible.

Inne opcje układu

Inne opcje układu to Flow i Table.

Układ przepływu

układ Flow jest domyślnym ustawieniem ContextMenuStrip, ToolStripDropDownMenui ToolStripOverflow. Jest on podobny do FlowLayoutPanel. Funkcje układu Flow są następujące:

Układ tabeli

Table układ jest domyślny dla StatusStrip. Jest on podobny do TableLayoutPanel. Funkcje układu Flow są następujące:

ToolStripItem

W poniższych tematach opisano ToolStripItem i elementy sterujące pochodzące z niego.

ToolStripItem jest abstrakcyjną klasą bazową dla wszystkich elementów, które przechodzą do ToolStrip. Poniższy model obiektu przedstawia hierarchię dziedziczenia ToolStripItem.

Diagram przedstawiający model obiektów ToolStripItem.

Klasy ToolStripItem albo dziedziczą bezpośrednio po ToolStripItem, albo pośrednio z ToolStripItem przez ToolStripControlHost lub ToolStripDropDownItem.

ToolStripItem kontrolki muszą być zawarte w ToolStrip, MenuStrip, StatusStriplub ContextMenuStrip i nie można ich dodać bezpośrednio do formularza. Różne klasy kontenerów zostały zaprojektowane tak, aby zawierały odpowiedni podzestaw kontrolek ToolStripItem.

W poniższej tabeli wymieniono standardowe kontrolki ToolStripItem oraz komponenty, w których wyglądają najlepiej. Mimo że dowolny element ToolStrip może być hostowany w dowolnym kontenerze pochodnym ToolStrip, te elementy zostały zaprojektowane tak, aby wyglądały najlepiej w następujących kontenerach:

Notatka

ToolStripDropDown nie pojawia się w przyborniku projektanta.

Element zawarty ToolStrip MenuStrip ContextMenuStrip StatusStrip ToolStripDropDown
ToolStripButton Tak Nie Nie Nie Tak
ToolStripComboBox Tak Tak Tak Nie Tak
ToolStripSplitButton Tak Nie Nie Tak Tak
ToolStripLabel Tak Nie Nie Tak Tak
ToolStripSeparator Tak Tak Tak Nie Tak
ToolStripDropDownButton Tak Nie Nie Tak Tak
ToolStripTextBox Tak Tak Tak Nie Tak
ToolStripMenuItem Nie Tak Tak Nie Nie
ToolStripStatusLabel Nie Nie Nie Tak Nie
ToolStripProgressBar Tak Nie Nie Tak Nie
ToolStripControlHost Tak Tak Nie Tak Tak

ToolStripButton

ToolStripButton jest elementem przyciskowym dla ToolStrip. Można go wyświetlić za pomocą różnych stylów obramowania i można go użyć do reprezentowania i aktywowania stanów operacyjnych. Można również zdefiniować ją tak, aby domyślnie miała fokus.

ToolStripLabel

ToolStripLabel zapewnia funkcje etykiet w kontrolkach ToolStrip. ToolStripLabel jest jak ToolStripButton, który domyślnie nie uzyskuje fokusu i nie jest renderowany jako wypchnięty lub wyróżniony.

ToolStripLabel jako hostowany element obsługuje klucze dostępu.

Użyj właściwości LinkColor, LinkVisitedi LinkBehavior w ToolStripLabel, aby obsługiwać kontrolkę łącza w ToolStrip.

Etykieta stanu paska narzędzi

ToolStripStatusLabel to wersja ToolStripLabel przeznaczona specjalnie do użytku w StatusStrip. Funkcje specjalne obejmują BorderStyle, BorderSidesi Spring.

SeparatorPaskaNarzędzi

ToolStripSeparator dodaje pionową lub poziomą linię do paska narzędzi lub menu w zależności od orientacji. Zapewnia grupowanie lub rozróżnienie między elementami, takimi jak te w menu.

Możesz dodać ToolStripSeparator w czasie projektowania, wybierając ją z listy rozwijanej. Można jednak również automatycznie utworzyć ToolStripSeparator, wpisując łącznik (-) w węźle szablonu projektanta lub w metodzie Add.

ToolStripControlHost

ToolStripControlHost jest abstrakcyjną klasą bazową dla ToolStripComboBox, ToolStripTextBoxi ToolStripProgressBar. ToolStripControlHost może hostować inne kontrolki, w tym kontrolki niestandardowe, na dwa sposoby:

  • Skonstruuj ToolStripControlHost za pomocą klasy pochodzącej z Control. Aby w pełni uzyskać dostęp do hostowanej kontrolki i właściwości, należy ponownie rzutować właściwość Control na rzeczywistą klasę, którą reprezentuje.

  • Rozszerz ToolStripControlHost, a w konstruktorze bez parametrów dziedziczonej klasy wywołaj konstruktor klasy bazowej przekazujący klasę pochodzącą z Control. Ta opcja umożliwia opakowywanie typowych metod kontroli i właściwości w celu łatwego dostępu w ToolStrip.

ToolStripComboBox

ToolStripComboBox jest ComboBox zoptymalizowany pod kątem hostowania w ToolStrip. Podzestaw właściwości i zdarzeń hostowanej kontrolki są widoczne na poziomie ToolStripComboBox, ale podstawowa kontrolka ComboBox jest w pełni dostępna za pośrednictwem właściwości ComboBox.

ToolStripTextBox

ToolStripTextBox jest TextBox zoptymalizowany pod kątem hostowania w ToolStrip. Podzestaw właściwości i zdarzeń hostowanej kontrolki są widoczne na poziomie ToolStripTextBox, ale podstawowa kontrolka TextBox jest w pełni dostępna za pośrednictwem właściwości TextBox.

ToolStripProgressBar

ToolStripProgressBar jest ProgressBar zoptymalizowany pod kątem hostowania w ToolStrip. Podzestaw właściwości i zdarzeń hostowanej kontrolki jest widoczny na poziomie ToolStripProgressBar, ale kontrolka bazowa ProgressBar jest w pełni dostępna za pośrednictwem właściwości ProgressBar.

ToolStripDropDownItem

ToolStripDropDownItem jest abstrakcyjną klasą bazową dla ToolStripMenuItem, ToolStripDropDownButtoni ToolStripSplitButton, która może bezpośrednio hostować elementy lub dodatkowe elementy w rozwijanym kontenerze. W tym celu należy ustawić właściwość DropDown na ToolStripDropDown i ustawić właściwość ItemsToolStripDropDown. Uzyskaj dostęp do tych elementów listy rozwijanej bezpośrednio za pośrednictwem właściwości DropDownItems.

ToolStripMenuItem

ToolStripMenuItem to ToolStripDropDownItem, która współpracuje z ToolStripDropDownMenu i ContextMenuStrip w celu obsługi specjalnego wyróżniania, układu oraz rozmieszczenia kolumn dla menu.

ToolStripDropDownButton

ToolStripDropDownButton wygląda jak ToolStripButton, ale wyświetla obszar listy rozwijanej po kliknięciu go przez użytkownika. Ukryj lub wyświetl strzałkę listy rozwijanej, ustawiając właściwość ShowDropDownArrow. ToolStripDropDownButton hostuje ToolStripOverflowButton, który wyświetla elementy przepełniające ToolStrip.

ToolStripSplitButton

ToolStripSplitButton łączy funkcje przycisków i przycisków rozwijanych.

Użyj właściwości DefaultItem, aby zsynchronizować zdarzenie Click wybranego elementu listy rozwijanej z elementem wyświetlanym na przycisku.

ToolStripItem — funkcje ogólne

ToolStripItem udostępnia następujące ogólne funkcje i opcje dziedziczenia kontrolek:

  • Zdarzenia podstawowe

  • Obsługa obrazów

  • Wyrównanie

  • Relacja tekstu i obrazu

  • Styl wyświetlania

Zdarzenia podstawowe

ToolStripItem kontrolki odbierają własne zdarzenia kliknięcia, myszy i malowania oraz mogą również wykonywać wstępne przetwarzanie klawiatury.

Obsługa obrazów

Właściwości Image, ImageAlign, ImageIndex, ImageKeyi ImageScaling dotyczą różnych aspektów obsługi obrazu. Użyj obrazów w kontrolkach ToolStrip, ustawiając te właściwości bezpośrednio lub konfigurując właściwość ImageList tylko w czasie działania.

Skalowanie obrazów jest określane przez interakcję właściwości zarówno w ToolStrip, jak i ToolStripItem, w następujący sposób:

Wyrównanie

Wartość właściwości Alignment określa koniec ToolStrip, na którym pojawia się element. Właściwość Alignment działa tylko wtedy, gdy styl układu ToolStrip jest ustawiony na jedną z wartości przepełnienia stosu.

Elementy są umieszczane na ToolStrip w kolejności, w jakiej pojawiają się w kolekcji Items. Aby programowo zmienić lokalizację elementu, użyj metody Insert, aby przenieść element w kolekcji. Ta metoda przenosi element, ale nie duplikuje go.

Relacja tekstu i obrazu

Właściwość TextImageRelation definiuje względne rozmieszczenie obrazu w odniesieniu do tekstu na ToolStripItem. Elementy, które nie mają obrazu, tekstu lub obu, są traktowane jako przypadki specjalne, dzięki czemu ToolStripItem nie wyświetla pustego miejsca dla brakującego elementu lub elementów.

Styl wyświetlania

DisplayStyle pozwala ustawić wartości właściwości Text i Image elementu, wyświetlając tylko to, co chcesz. Jest to zwykle używane do zmiany tylko stylu wyświetlania w przypadku wyświetlania tego samego elementu w innym kontekście.

Klasy akcesoriów

Klasy, które zapewniają różne inne funkcje, obejmują:

Zobacz też