Architettura del controllo ToolStrip

Le ToolStrip classi e ToolStripItem forniscono un sistema flessibile ed estendibile per la visualizzazione di voci di menu, stato e barra degli strumenti. Queste classi sono tutte contenute nello spazio dei System.Windows.Forms nomi e sono tutte denominate in genere con il prefisso "ToolStrip" (ad esempio ToolStripOverflow) o con il suffisso "Strip", ad esempio MenuStrip.

ToolStrip

Negli argomenti seguenti vengono descritti ToolStrip e i controlli che derivano da esso.

ToolStrip è la classe base astratta per MenuStrip, StatusStripe ContextMenuStrip. Il modello a oggetti seguente mostra la gerarchia di ToolStrip ereditarietà.

Diagram that shows the ToolStrip object model.

È possibile accedere a tutti gli elementi di un ToolStrip oggetto tramite la Items raccolta. È possibile accedere a tutti gli elementi di un ToolStripDropDownItem oggetto tramite la DropDownItems raccolta. In una classe derivata da ToolStripè anche possibile utilizzare la DisplayedItems proprietà per accedere solo agli elementi attualmente visualizzati. Si tratta degli elementi attualmente non inclusi in un menu di overflow.

Gli elementi seguenti sono progettati specificamente per funzionare perfettamente con entrambi ToolStripSystemRenderer e ToolStripProfessionalRenderer in tutti gli orientamenti. Sono disponibili per impostazione predefinita in fase di progettazione per il ToolStrip controllo:

MenuStrip è il contenitore di primo livello che sostituisce MainMenu. Fornisce inoltre funzionalità di gestione delle chiavi e più funzionalità mdi (Document Interface). Funzionalmente ToolStripDropDownItem e funzionano insieme a MenuStrip, anche se sono derivati da ToolStripItemToolStripMenuItem .

Gli elementi seguenti sono progettati specificamente per funzionare perfettamente con entrambi ToolStripSystemRenderer e ToolStripProfessionalRenderer in tutti gli orientamenti. Sono disponibili per impostazione predefinita in fase di progettazione per il MenuStrip controllo:

StatusStrip

StatusStrip sostituisce il StatusBar controllo . Le funzionalità speciali di StatusStrip includono un layout di tabella personalizzato, il supporto per il ridimensionamento e i grip mobili del modulo e la Spring proprietà , che consente ToolStripStatusLabel di riempire automaticamente lo spazio disponibile.

Gli elementi seguenti sono progettati specificamente per funzionare perfettamente con entrambi ToolStripSystemRenderer e ToolStripProfessionalRenderer in tutti gli orientamenti. Sono disponibili per impostazione predefinita in fase di progettazione per il StatusStrip controllo:

ContextMenuStrip

ContextMenuStrip sostituisce ContextMenu. È possibile associare un oggetto ContextMenuStrip a qualsiasi controllo e un clic con il pulsante destro del mouse visualizza automaticamente il menu di scelta rapida (o il menu di scelta rapida). È possibile visualizzare un oggetto ContextMenuStrip a livello di codice usando il Show metodo . ContextMenuStripsupporta eventi e Closing annullabili Opening per gestire scenari dinamici di popolamento e clic multipli. ContextMenuStrip supporta immagini, stato di controllo voci di menu, testo, tasti di scelta rapida, tasti di scelta rapida e menu a cascata.

Gli elementi seguenti sono progettati specificamente per funzionare perfettamente con entrambi ToolStripSystemRenderer e ToolStripProfessionalRenderer in tutti gli orientamenti. Sono disponibili per impostazione predefinita in fase di progettazione per il ContextMenuStrip controllo:

Funzionalità generiche toolStrip

Negli argomenti seguenti vengono descritte le funzionalità e il comportamento generici per i ToolStrip controlli derivati e .

Pittura

È possibile eseguire un disegno personalizzato nei ToolStrip controlli in diversi modi. Come per gli altri controlli Windows Form, e dispongono di metodi ed eventi di cui è Paint possibile eseguire l'override ToolStripOnPaint.ToolStripItem Come per la pittura regolare, il sistema di coordinate è relativo all'area client del controllo; ovvero, l'angolo superiore sinistro del controllo è 0, 0. L'evento e OnPaint il Paint metodo per un ToolStripItem comportamento simile ad altri eventi di disegno del controllo.

I ToolStrip controlli forniscono inoltre accesso più dettagliato al rendering degli elementi e del contenitore tramite la ToolStripRenderer classe , che dispone di metodi sottoponibili a override per disegnare lo sfondo, lo sfondo dell'elemento, l'immagine dell'elemento, la freccia dell'elemento, il testo dell'elemento e il bordo dell'oggetto ToolStrip. Gli argomenti dell'evento per questi metodi espongono diverse proprietà, ad esempio rettangoli, colori e formati di testo che è possibile modificare in base alle esigenze.

Per regolare solo alcuni aspetti della modalità di disegno di un elemento, in genere si esegue l'override di ToolStripRenderer.

Se si scrive un nuovo elemento e si desidera controllare tutti gli aspetti del disegno, eseguire l'override del OnPaint metodo . Dall'interno OnPaintdi è possibile usare i metodi di ToolStripRenderer.

Per impostazione predefinita, l'oggetto ToolStrip viene memorizzato nel doppio buffer, sfruttando l'impostazione OptimizedDoubleBuffer .

Genitorialità

Il concetto di proprietà del contenitore e padreing è più complesso nei ToolStrip controlli rispetto ad altri controlli contenitore Windows Form. Ciò è necessario per supportare scenari dinamici, ad esempio overflow, condivisione di elementi a discesa tra più ToolStrip elementi e per supportare la generazione di un ContextMenuStrip oggetto da un controllo.

L'elenco seguente descrive i membri correlati all'elemento padre e ne spiega l'uso.

  • OwnerItem accede all'elemento che rappresenta l'origine dell'elemento a discesa. È simile a SourceControl, ma invece di restituire un controllo , restituisce un oggetto ToolStripItem.

  • SourceControl determina quale controllo è l'origine di ContextMenuStrip quando più controlli condividono lo stesso ContextMenuStripoggetto .

  • GetCurrentParent è una funzione di accesso di sola lettura per la Parent proprietà . Un elemento padre è diverso da un proprietario in quanto un elemento padre indica la corrente ToolStrip restituita in cui viene visualizzato l'elemento, che potrebbe trovarsi nell'area di overflow.

  • Owner restituisce l'oggetto il ToolStrip cui insieme Items contiene l'oggetto corrente ToolStripItem. Questo è il modo migliore per fare riferimento ImageList o altre proprietà nel livello ToolStrip superiore senza scrivere codice speciale per gestire l'overflow.

Comportamento dei controlli ereditati

I controlli seguenti vengono bloccati ogni volta che vengono usati nell'ereditarietà:

Ad esempio, creare una nuova applicazione Windows Form usando uno o più controlli nell'elenco precedente. Impostare il modificatore di accesso di uno o più controlli su public o protectede quindi compilare il progetto. Aggiungere un modulo che eredita dal primo modulo e quindi selezionare un controllo ereditato. Il controllo viene visualizzato bloccato, comportandosi come se il modificatore di accesso fosse private.

Supporto dell'ereditarietà toolStripContainer

Il ToolStripContainer controllo supporta scenari ereditati limitati, simile all'esempio seguente:

  1. Creare una nuova applicazione Windows Form.

  2. Aggiungere un tipo ToolStripContainer al form.

  3. Impostare il modificatore di accesso di su ToolStripContainerpublic o protected.

  4. Aggiungere qualsiasi combinazione di ToolStripcontrolli , MenuStripe ContextMenuStrip alle ToolStripPanel aree dell'oggetto ToolStripContainer.

  5. Compilare il progetto.

  6. Aggiungere un modulo che eredita dal primo modulo.

  7. Selezionare l'oggetto ereditato ToolStripContainer nel modulo.

Comportamento ereditato dei controlli figlio

Dopo aver completato i passaggi precedenti, si verifica il comportamento ereditato seguente:

  • Nella finestra di progettazione il controllo viene visualizzato con un'icona ereditata.

  • I ToolStripPanel controlli sono bloccati. Non è possibile selezionare o riorganizzare il relativo contenuto.

  • È possibile aggiungere controlli a ToolStripContentPanel, spostare i controlli e impostarli come controlli figlio di ToolStripContentPanel.

  • Le modifiche vengono mantenute dopo la compilazione del modulo.

    Nota

    Rimuovere i modificatori di accesso da tutti i ToolStripPanel controlli che fanno parte di un oggetto ToolStripContainer. Il modificatore di accesso dell'oggetto ToolStripContainer controlla l'intero controllo.

Attendibilità parziale

Le limitazioni di ToolStrips con attendibilità parziale sono progettate per impedire l'immissione accidentale di informazioni personali che potrebbero essere usate da persone o servizi non autorizzati. Le misure protettive sono le seguenti:

  • ToolStripDropDown I controlli devono AllWindows visualizzare gli elementi in un oggetto ToolStripControlHost. Questo vale sia per i controlli intrinseci, ToolStripTextBoxad esempio , ToolStripComboBoxche ToolStripProgressBar per i controlli creati dall'utente. Se questo requisito non è soddisfatto, questi elementi non vengono visualizzati. Non viene generata alcuna eccezione.

  • L'impostazione della AutoClose proprietà su false non è consentita e il parametro di evento annullabile Closing viene ignorato. Ciò rende impossibile immettere più di una sequenza di tasti senza ignorare l'elemento a discesa. Se questo requisito non viene soddisfatto, tali elementi non vengono visualizzati. Non viene generata alcuna eccezione.

  • Molti eventi di gestione delle sequenze di tasti non verranno generati se si verificano in contesti di attendibilità parziale diversi da AllWindows.

  • Le chiavi di accesso non vengono elaborate quando AllWindows non viene concesso.

Utilizzo

I modelli di utilizzo seguenti hanno un impatto sul layout, sull'interazione tramite tastiera e sul ToolStrip comportamento dell'utente finale:

  • Aggiunto a un oggetto ToolStripPanel

    Può ToolStrip essere riposizionato all'interno di ToolStripPanel e in ToolStripPanels. La Dock proprietà viene ignorata e, se la Stretch proprietà è false, le dimensioni dell'oggetto ToolStrip aumentano man mano che gli elementi vengono aggiunti a ToolStripPanel. In genere, non ToolStrip partecipa all'ordine di tabulazioni.

  • Ancorato

    L'oggetto ToolStrip viene posizionato su un lato di un contenitore in una posizione fissa e la sua dimensione si espande sull'intero bordo a cui è ancorato. In genere, non ToolStrip partecipa all'ordine di tabulazioni.

  • Assolutamente posizionato

    è ToolStrip come gli altri controlli, in quanto viene posizionato dalla Location proprietà , ha una dimensione fissa e in genere partecipa all'ordine di tabulazioni.

Interazione da tastiera

Chiavi di accesso

In combinazione con o dopo il tasto ALT, i tasti di scelta rappresentano un modo per attivare un controllo tramite la tastiera. ToolStrip supporta chiavi di accesso esplicite e implicite. La definizione esplicita usa un carattere di e commerciale (&) che precede la lettera. La definizione implicita usa un algoritmo che tenta di trovare un elemento corrispondente in base all'ordine dei caratteri in una determinata Text proprietà.

Tasti di scelta rapida

I tasti di scelta rapida usati da un MenuStrip oggetto utilizzano una combinazione dell'enumerazione (che non è specifica dell'ordine Keys ) per definire il tasto di scelta rapida. È anche possibile utilizzare la ShortcutKeyDisplayString proprietà per visualizzare un tasto di scelta rapida solo con testo, ad esempio la visualizzazione di "Canc" anziché "Elimina".

Il tasto ALT attiva l'oggetto MenuStrip a cui MainMenuStrippunta . Da qui, CTRL+TAB si sposta tra ToolStrip i controlli all'interno ToolStripPaneldi s. Il tasto TAB e i tasti di direzione sul tastierino numerico passano tra gli elementi in un oggetto ToolStrip. Un algoritmo speciale gestisce lo spostamento nell'area di overflow. BARRA SPAZIATRICE seleziona un ToolStripButtonoggetto , ToolStripDropDownButtono ToolStripSplitButton.

Stato attivo e convalida

Quando attivato dal tasto ALT, o MenuStripToolStrip in genere non accetta né rimuove lo stato attivo dal controllo che attualmente ha lo stato attivo. Se è presente un controllo ospitato all'interno MenuStrip di o un elenco a discesa di MenuStrip, il controllo ottiene lo stato attivo quando l'utente preme TAB. In generale, gli GotFocuseventi , LostFocus, Entere Leave di MenuStrip potrebbero non essere generati quando vengono attivati dalla tastiera. In questi casi, usare invece gli MenuActivate eventi e MenuDeactivate .

Per impostazione predefinita, CausesValidation è false. Chiamare Validate in modo esplicito nel modulo per eseguire la convalida.

Layout

È possibile controllare ToolStrip il layout scegliendo uno dei membri di ToolStripLayoutStyle con la LayoutStyle proprietà .

Layout dello stack

L'impilamento è l'organizzazione di elementi l'uno accanto all'altro a entrambe le estremità dell'oggetto ToolStrip. Nell'elenco seguente vengono descritti i layout dello stack.

Altre funzionalità dei layout dello stack

Alignment determina la fine dell'oggetto ToolStrip a cui è allineato l'elemento.

Quando gli elementi non rientrano in ToolStrip, viene visualizzato automaticamente un pulsante di overflow. L'impostazione della Overflow proprietà determina se un elemento viene visualizzato nell'area di overflow sempre, in base alle esigenze o mai.

LayoutCompleted Nel caso, è possibile esaminare la Placement proprietà per determinare se un elemento è stato inserito nell'oggetto principale ToolStrip, l'overflow ToolStripo se non è attualmente visualizzato. I motivi tipici per cui un elemento non viene visualizzato sono che l'elemento non rientra nell'oggetto principale ToolStrip e la relativa Overflow proprietà è stata impostata su Never.

Rendere un ToolStrip oggetto mobile inserendolo in e ToolStripPanel impostandolo GripStyle su Visible.

Altre opzioni di layout

Le altre opzioni di layout sono Flow e Table.

Layout di flusso

Flow layout è l'impostazione predefinita per ContextMenuStrip, ToolStripDropDownMenue ToolStripOverflow. È simile a FlowLayoutPanel. Le funzionalità del Flow layout sono le seguenti:

Layout tabella

Table layout è l'impostazione predefinita per StatusStrip. È simile a TableLayoutPanel. Le funzionalità del Flow layout sono le seguenti:

ToolStripItem

Negli argomenti seguenti vengono descritti ToolStripItem e i controlli che derivano da esso.

ToolStripItem è la classe base astratta per tutti gli elementi che vengono inseriti in un oggetto ToolStrip. Il modello a oggetti seguente mostra la gerarchia di ToolStripItem ereditarietà.

Diagram that shows the ToolStripItem object model.

ToolStripItem le classi ereditano direttamente da ToolStripItemoppure ereditano indirettamente da ToolStripItem o ToolStripControlHostToolStripDropDownItem.

ToolStripItem I controlli devono essere contenuti in un ToolStripoggetto , MenuStrip, StatusStripo ContextMenuStrip e non possono essere aggiunti direttamente a un modulo. Le varie classi di contenitori sono progettate per contenere un subset appropriato di ToolStripItem controlli.

Nella tabella seguente sono elencati i controlli delle scorte ToolStripItem e i contenitori in cui hanno un aspetto ottimale. Anche se qualsiasi ToolStrip elemento può essere ospitato in qualsiasi ToolStripcontenitore derivato da , questi elementi sono stati progettati per avere un aspetto ottimale nei contenitori seguenti:

Nota

ToolStripDropDown non viene visualizzato nella casella degli strumenti della finestra di progettazione.

Elemento contenuto ToolStrip MenuStrip ContextMenuStrip StatusStrip Toolstripdropdown
ToolStripButton No No No
ToolStripComboBox No
ToolStripSplitButton No No
ToolStripLabel No No
ToolStripSeparator No
ToolStripDropDownButton No No
ToolStripTextBox No
ToolStripMenuItem No No No
ToolStripStatusLabel No No No No
ToolStripProgressBar No No No
ToolStripControlHost No

Toolstripbutton

ToolStripButton è l'elemento del pulsante per ToolStrip. È possibile visualizzarlo con vari stili di bordo ed è possibile usarlo per rappresentare e attivare gli stati operativi. È anche possibile definirlo per impostare lo stato attivo per impostazione predefinita.

Toolstriplabel

ToolStripLabel fornisce funzionalità di etichetta nei ToolStrip controlli. è ToolStripLabel come un ToolStripButton oggetto che non ottiene lo stato attivo per impostazione predefinita e che non esegue il rendering come push o evidenziato.

ToolStripLabel come elemento ospitato supporta le chiavi di accesso.

Utilizzare le LinkColorproprietà , LinkVisitede LinkBehavior di un oggetto ToolStripLabel per supportare il controllo collegamento in un oggetto ToolStrip.

ToolStripStatusLabel

ToolStripStatusLabel è una versione di ToolStripLabel progettata specificamente per l'uso in StatusStrip. Le funzionalità speciali includono BorderStyle, BorderSidese Spring.

ToolStripSeparator

Aggiunge ToolStripSeparator una linea verticale o orizzontale a una barra degli strumenti o a un menu, a seconda dell'orientamento. Fornisce il raggruppamento o la distinzione tra elementi, ad esempio quelli presenti in un menu.

È possibile aggiungere un oggetto ToolStripSeparator in fase di progettazione scegliendolo da un elenco a discesa. Tuttavia, è anche possibile creare automaticamente un ToolStripSeparator oggetto digitando un trattino (-) nel nodo del modello di progettazione o nel Add metodo .

Toolstripcontrolhost

ToolStripControlHost è la classe base astratta per ToolStripComboBox, ToolStripTextBoxe ToolStripProgressBar. ToolStripControlHost può ospitare altri controlli, inclusi i controlli personalizzati, in due modi:

  • Costruire un ToolStripControlHost oggetto con una classe che deriva da Control. Per accedere completamente al controllo e alle proprietà ospitate, è necessario eseguire il cast della Control proprietà alla classe effettiva rappresentata.

  • Estendere ToolStripControlHoste nel costruttore senza parametri della classe ereditata chiamare il costruttore della classe base passando una classe che deriva da Control. Questa opzione consente di eseguire il wrapping di proprietà e metodi di controllo comuni per semplificare l'accesso in un oggetto ToolStrip.

ToolStripComboBox

ToolStripComboBox è l'oggetto ottimizzato per l'hosting ComboBox in un oggetto ToolStrip. Un subset delle proprietà e degli eventi del controllo ospitato viene esposto a ToolStripComboBox livello, ma il controllo sottostante ComboBox è completamente accessibile tramite la ComboBox proprietà .

Toolstriptextbox

ToolStripTextBox è l'oggetto ottimizzato per l'hosting TextBox in un oggetto ToolStrip. Un subset delle proprietà e degli eventi del controllo ospitato viene esposto a ToolStripTextBox livello, ma il controllo sottostante TextBox è completamente accessibile tramite la TextBox proprietà .

ToolStripProgressBar

ToolStripProgressBar è l'oggetto ottimizzato per l'hosting ProgressBar in un oggetto ToolStrip. Un subset delle proprietà e degli eventi del controllo ospitato viene esposto a ToolStripProgressBar livello, ma il controllo sottostante ProgressBar è completamente accessibile tramite la ProgressBar proprietà .

Toolstripdropdownitem

ToolStripDropDownItem è la classe base astratta per ToolStripMenuItem, ToolStripDropDownButtone ToolStripSplitButton, che può ospitare elementi direttamente o ospitare elementi aggiuntivi in un contenitore a discesa. A tale scopo, impostare la DropDown proprietà su e ToolStripDropDown impostare la Items proprietà dell'oggetto ToolStripDropDown. Accedere a questi elementi a discesa direttamente tramite la DropDownItems proprietà .

ToolStripMenuItem

ToolStripMenuItem è un ToolStripDropDownItem oggetto che funziona con ToolStripDropDownMenu e ContextMenuStrip per gestire l'evidenziazione, il layout e la disposizione delle colonne speciali per i menu.

Toolstripdropdownbutton

ToolStripDropDownButton ha un aspetto simile ToolStripButtona , ma mostra un'area a discesa quando l'utente lo fa clic. Nascondere o visualizzare la freccia a discesa impostando la ShowDropDownArrow proprietà . ToolStripDropDownButtonospita un oggetto ToolStripOverflowButton che visualizza gli elementi che esondano .ToolStrip

Toolstripsplitbutton

ToolStripSplitButton combina la funzionalità pulsante e pulsante a discesa.

Utilizzare la DefaultItem proprietà per sincronizzare l'evento Click dell'elemento a discesa scelto con l'elemento visualizzato sul pulsante.

Funzionalità generiche toolStripItem

ToolStripItem fornisce le funzionalità e le opzioni generiche seguenti per ereditare i controlli:

  • Eventi principali

  • Gestione delle immagini

  • Allineamento

  • Relazione tra testo e immagine

  • Stile di visualizzazione

Eventi principali

ToolStripItem i controlli ricevono i propri eventi click, mouse e paint e possono eseguire anche alcune pre-elaborazione della tastiera.

Gestione delle immagini

Le Imageproprietà , ImageIndexImageAlign, ImageKey, e ImageScaling riguardano vari aspetti della gestione delle immagini. Usare le immagini nei ToolStrip controlli impostando queste proprietà direttamente o impostando la proprietà di sola ImageList esecuzione.

Il ridimensionamento delle immagini è determinato dall'interazione delle proprietà in ToolStrip e ToolStripItem, come indicato di seguito:

Allineamento

Il valore della Alignment proprietà determina la fine dell'oggetto in corrispondenza del ToolStrip quale viene visualizzato un elemento. La Alignment proprietà funziona solo quando lo stile di layout di ToolStrip è impostato su uno dei valori di overflow dello stack.

Gli elementi vengono inseriti nell'oggetto ToolStrip nell'ordine in cui gli elementi vengono visualizzati nell'insieme Items. Per modificare a livello di codice la posizione di un elemento, utilizzare il Insert metodo per spostare l'elemento nella raccolta. Questo metodo sposta l'elemento ma non lo duplica.

Relazione tra testo e immagine

La TextImageRelation proprietà definisce la posizione relativa dell'immagine rispetto al testo in un oggetto ToolStripItem. Gli elementi che non dispongono di un'immagine, un testo o entrambi vengono considerati casi speciali in modo che non ToolStripItem visualizzi un punto vuoto per l'elemento o gli elementi mancanti.

Stile di visualizzazione

DisplayStyle consente di impostare i valori delle proprietà Text e Image di un elemento visualizzando solo ciò che si desidera. Viene in genere utilizzato per modificare solo lo stile di visualizzazione quando viene visualizzato lo stesso elemento in un contesto diverso.

Classi accessorie

Le classi che forniscono varie altre funzionalità includono:

Vedi anche