Condividi tramite


Architettura del controllo ToolStrip

Le classi ToolStrip e ToolStripItem forniscono un sistema flessibile e estendibile per la visualizzazione di elementi di barre degli strumenti, barre di stato e menu. Tutte le classi sono contenute nello spazio dei nomi System.Windows.Forms e nel nome contengono il prefisso "ToolStrip" (ad esempio ToolStripOverflow) oppure il suffisso "Strip" (ad esempio MenuStrip).

ToolStrip

Negli argomenti seguenti vengono descritti la classe ToolStrip e i relativi controlli derivati.

ToolStrip è la classe base astratta per MenuStrip, StatusStrip e ContextMenuStrip. Nel modello a oggetti seguente viene illustrata la gerarchia di ereditarietà di ToolStrip.

Modello a oggetti ToolStrip

Modello a oggetti ToolStrip

È possibile accedere a tutti gli elementi in ToolStrip attraverso l'insieme Items. È possibile accedere a tutti gli elementi in ToolStripDropDownItem attraverso l'insieme DropDownItems. In una classe derivata da ToolStrip, è anche possibile utilizzare la proprietà DisplayedItems per accedere solo agli elementi attualmente visualizzati. Si tratta degli elementi non presenti attualmente in un menu di overflow.

Gli elementi seguenti sono specificamente progettati per essere pienamente compatibili con ToolStripSystemRenderer e ToolStripProfessionalRenderer in tutti gli orientamenti. Per impostazione predefinita, sono disponibili in fase di progettazione per il controllo ToolStrip:

MenuStrip è il contenitore di livello superiore che sostituisce MainMenu. Fornisce inoltre la gestione dei tasti e funzionalità di interfaccia a documenti multipli. Dal punto di vista funzionale, ToolStripDropDownItem e ToolStripMenuItem vengono utilizzate insieme a MenuStrip, sebbene derivino da ToolStripItem.

Gli elementi riportati di seguito sono progettati specificamente per essere utilizzati senza problemi con ToolStripSystemRenderer e ToolStripProfessionalRenderer in tutti gli orientamenti. Per impostazione predefinita, sono disponibili in fase di progettazione per il controllo MenuStrip:

StatusStrip

StatusStrip sostituisce il controllo StatusBar. Le funzionalità speciali di StatusStrip includono un layout di tabella personalizzato, il supporto per i riquadri di ridimensionamento e di spostamento e la proprietà Spring, che consente a ToolStripStatusLabel di occupare automaticamente lo spazio disponibile.

Gli elementi riportati di seguito sono progettati specificamente per essere utilizzati senza problemi con ToolStripSystemRenderer e ToolStripProfessionalRenderer in tutti gli orientamenti. Per impostazione predefinita, sono disponibili in fase di progettazione per il controllo StatusStrip:

ContextMenuStrip

ContextMenuStrip sostituisce ContextMenu. È possibile associare un controllo ContextMenuStrip a qualsiasi controllo. Con un'azione di clic con il pulsante destro del mouse verrà automaticamente visualizzato un menu di scelta rapida. È possibile mostrare un oggetto ContextMenuStrip a livello di programmazione utilizzando il metodo Show. L'oggetto ContextMenuStrip supporta gli eventi cancellabili Opening e Closing per gestire il popolamento dinamico e scenari a selezione multipla. L'oggetto ContextMenuStrip supporta le immagini, lo stato di selezione delle voci di menu, il testo, i tasti di scelta, i tasti di scelta rapida e i menu a cascata.

Gli elementi riportati di seguito sono progettati specificamente per essere utilizzati senza problemi con ToolStripSystemRenderer e ToolStripProfessionalRenderer in tutti gli orientamenti. Per impostazione predefinita, sono disponibili in fase di progettazione per il controllo ContextMenuStrip:

Funzionalità generiche di ToolStrip

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

Disegno

È possibile eseguire disegni personalizzati nei controlli ToolStrip in molti modi. Come altri controlli Windows Form, i controlli ToolStrip e ToolStripItem dispongono di metodi OnPaint ed eventi Paint sottoponibili a override. Analogamente ai disegni normali, il sistema di coordinate è relativo all'area client del controllo, ovvero l'angolo superiore sinistro del controllo corrisponde a 0, 0. L'evento Paint e il metodo OnPaint per un oggetto ToolStripItem si comportano come gli altri eventi del controllo Paint.

I controlli ToolStrip forniscono inoltre l'accesso ottimizzato al rendering degli elementi e del contenitore tramite la classe ToolStripRenderer, che dispone di metodi sottoponibili a override per il disegno dello sfondo, dello sfondo dell'elemento, dell'immagine dell'elemento, della freccia dell'elemento e del testo dell'elemento, nonché del bordo di ToolStrip. Gli argomenti dell'evento per questi metodi espongono diverse proprietà ad esempio rettangoli, colori e formati testo che è possibile regolare secondo necessità.

Per regolare solo alcuni aspetti di come viene disegnato un elemento, eseguire generalmente l'override della classe ToolStripRenderer.

Se si scrive un nuovo elemento e si desidera controllare tutti gli aspetti del disegno, eseguire l'override del metodo OnPaint. Dal metodo OnPaint è possibile utilizzare i metodi della classe ToolStripRenderer.

Per impostazione predefinita, il controllo ToolStrip è a doppio buffering, traendo vantaggio dall'impostazione OptimizedDoubleBuffer.

Elemento padre

Il concetto di proprietà e elemento padre del contenitore è più complesso nei controlli ToolStrip che in altri controlli contenitori Windows Form. È necessario per supportare scenari dinamici come overflow e condivisione di elementi a discesa tra più elementi ToolStrip e per supportare la generazione di una classe ContextMenuStrip da un controllo.

Nell'elenco seguente vengono descritti i membri relativi all'assegnazione di un elemento padre e il relativo utilizzo.

  • La proprietà OwnerItem accede all'elemento che corrisponde all'origine dell'elemento a discesa. È simile alla proprietà SourceControl, ma anziché restituire un controllo, restituisce una classe ToolStripItem.

  • La proprietà SourceControl determina quale controllo è l'origine della classe ContextMenuStrip quando più controlli condividono la stessa classe ContextMenuStrip.

  • Il metodo GetCurrentParent è una funzione di accesso di sola lettura alla proprietà Parent. Un elemento padre differisce da un proprietario in quanto indica il controllo ToolStrip corrente restituito in cui l'elemento è visualizzato, che potrebbe essere nell'area di overflow.

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

Comportamento dei controlli ereditati

I controlli seguenti vengono bloccati ogni volta che vengono utilizzati nell'erediterietà:

Ad esempio, creare una nuova applicazione Windows Form utilizzando uno o più controlli dell'elenco precedente. Impostare il modificatore di accesso di uno o più controlli su public o protectede quindi compilare il progetto. Aggiungere un form che eredita dal primo form, quindi selezionare un controllo ereditato. Il controllo appare bloccato e si comporta come se il proprio modificatore di accesso fosse private.

Supporto di ToolStripContainer dell'ereditarietà

Il controllo ToolStripContainer supporta scenari di ereditarietà limitati, in modo simile all'esempio seguente:

  1. Creare una nuova applicazione Windows Form.

  2. Aggiungere una classe ToolStripContainer al form.

  3. Impostare il modificatore di accesso del controllo ToolStripContainer su public o protected.

  4. Aggiungere qualsiasi combinazione di controlli ToolStrip, MenuStrip e ContextMenuStrip alle aree ToolStripPanel del controllo ToolStripContainer.

  5. Compilare il progetto.

  6. Aggiungere un form che eredita dal primo form.

  7. Selezionare il controllo ToolStripContainer ereditato sul form.

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 controlli ToolStripPanel sono bloccati. Non è possibile selezionare né ridisporre il relativo contenuto.

  • È possibile aggiungere controlli al controllo ToolStripContentPanel, spostare i controlli e renderli controlli figlio del controllo ToolStripContentPanel.

  • Le modifiche persistono dopo la compilazione del form.

    Nota

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

Attendibilità parziale

Le limitazioni dei controlli ToolStrip con attendibilità parziale sono progettate per impedire l'immissione accidentale di informazioni personali che potrebbero essere utilizzate da utenti o servizi non autorizzati. Di seguito sono riportate le misure protettive:

  • I controlli ToolStripDropDown richiedono che l'enumerazione AllWindows visualizzi gli elementi in una classe ToolStripControlHost. Ciò vale sia per i controlli intrinseci, ad esempio ToolStripTextBox, ToolStripComboBox e ToolStripProgressBar che per i controlli creati dall'utente. Se questo requisito non viene soddisfatto, gli elementi non vengono visualizzati. Non viene generata alcuna eccezione.

  • Non è consentito impostare la proprietà AutoClose su false e il parametro dell'evento Closing annullabile viene ignorato. In questo modo è impossibile immettere più di una sequenza di tasti senza chiudere l'elenco a discesa. Se questo requisito non viene soddisfatto, gli 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 con attendibilità parziale diversi da AllWindows.

  • I tasti di scelta non vengono elaborati se non viene concessa l'enumerazione AllWindows.

Utilizzo

I modelli di utilizzo seguenti influiscono sul layout del controllo ToolStrip, sull'interazione da tastiera e sul comportamento degli utenti finali:

  • Unito in un controllo ToolStripPanel

    ToolStrip può essere riposizionato all'interno del controllo ToolStripPanel e tra i controlli ToolStripPanel. La proprietà Dock viene ignorata e, se viene ignorata e, se Stretch la proprietà è false, le dimensioni di ToolStrip aumentano quando vengono aggiunti elementi a ToolStripPanel. In genere, ToolStrip non partecipa nell'ordine di tabulazione.

  • Ancorato

    ToolStrip viene inserito su un lato di un contenitore in una posizione fissa e le relative dimensioni si espandono in tutto il bordo cui è ancorato. In genere, ToolStrip non partecipa nell'ordine di tabulazione.

  • Posizionato in modo assoluto

    ToolStrip è simile ad altri controlli, in quanto viene inserito dalla proprietà Location, ha dimensioni fisse e in genere partecipa nell'ordine di tabulazione.

Interazione da tastiera

Tasti di scelta

Premuti in combinazione o dopo il tasto ALT, i tasti di scelta rappresentano una delle modalità disponibili per attivare un controllo tramite tastiera. ToolStrip supporta i tasti di scelta espliciti e impliciti. Con la definizione esplicita si utilizza un carattere e commerciale (&) anteposto alla lettera. Con la definizione implicita si utilizza un algoritmo che tenta di trovare un elemento corrispondente in base all'ordine dei caratteri in una proprietà Text specificata.

Tasti di scelta rapida

Per la definizione dei tasti di scelta rapida utilizzati da un controllo MenuStrip si utilizza una combinazione dell'enumerazione Keys (che non è specifica dell'ordine). È anche possibile utilizzare la proprietà ShortcutKeyDisplayString per visualizzare un tasto di scelta rapida con solo testo, ad esempio che visualizza "Canc" anziché "Elimina".

Spostamento

Il tasto ALT attiva il controllo MenuStrip a cui fa riferimento la proprietà MainMenuStrip. Da questo punto, la combinazione CTRL+TAB consente di spostarsi tra i controlli ToolStrip all'interno dei controlli ToolStripPanel. Il tasto TAB e i tasti di direzione del tastierino numerico consentono di spostarsi tra gli elementi di un controllo ToolStrip. Un algoritmo speciale gestisce gli spostamenti nell'area di overflow. Con la BARRA SPAZIATRICE si seleziona un controllo ToolStripButton, ToolStripDropDownButton o ToolStripSplitButton.

Stato attivo e convalida

Se attivato dal tasto ALT, il controllo MenuStrip o ToolStrip in genere non assume né rimuove lo stato attivo dal controllo cui è al momento assegnato. Se è disponibile un controllo contenuto all'interno della classe MenuStrip o un controllo a discesa della classe MenuStrip, il controllo riceve lo stato attivo quando l'utente preme il tasto TAB. In generale, è possibile che gli eventi GotFocus, LostFocus, Enter e Leave di MenuStrip non vengano generati quando vengono attivati tramite tastiera. In tali casi, utilizzare invece gli eventi MenuActivate e MenuDeactivate.

Per impostazione predefinita, il valore di CausesValidation è false. Eseguire una chiamata al metodo Validate in modo esplicito sul form per eseguire la convalida.

Layout

Per controllare il layout di ToolStrip, scegliere uno dei membri della classe ToolStripLayoutStyle con la proprietà LayoutStyle.

Layout di stack

Lo stacking è la disposizione degli elementi adiacenti alle due estremità della classe ToolStrip. Nell'elenco riportato di seguito vengono descritti i layout di stack.

Altre funzionalità dei layout di stack

Alignment determina la fine del ToolStrip a cui l'elemento viene allineato.

Quando gli elementi non corrispondono all'interno del ToolStrip, viene visualizzato automaticamente un pulsante di overflow. L'impostazione della proprietà Overflow determina se un elemento deve essere visualizzato o meno nell'area di overflow, in base alle necessità.

Nell'evento LayoutCompleted è possibile controllare la proprietà Placement per determinare se un elemento è stato collocato nella classe ToolStrip principale, nella classe ToolStrip di overflow o se non viene visualizzato affatto. Un elemento non viene in genere visualizzato perché non è contenuto nell'oggetto ToolStrip principale e la relativa proprietà Overflow è impostata su Never.

Rendere un ToolStrip mobile inserendolo in un ToolStripPanel e impostandone la proprietà GripStyle su Visible.

Altre opzioni di layout

Le altre opzioni di layout sono Flow e Table.

Layout di flusso

Il layout Flow è l'impostazione predefinita per ContextMenuStrip, ToolStripDropDownMenu e ToolStripOverflow. È simile alla classe FlowLayoutPanel. Le funzionalità del layout Flow sono:

Layout Table

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

  • Tutte le funzionalità di TableLayoutPanel sono esposte dalla proprietà LayoutSettings. È necessario eseguire il cast della classe LayoutSettings a una classe TableLayoutSettings.

  • È possibile utilizzare le proprietà Dock e Anchor nel codice per allineare gli elementi all'interno della cella di tabella.

  • La proprietà Alignment viene ignorata.

  • Nell'evento LayoutCompleted è possibile controllare la proprietà Placement per determinare se un elemento è stato collocato nella classe ToolStrip principale.

  • Il riquadro di ridimensionamento non viene sottoposto a rendering, pertanto non è possibile spostare il controllo ToolStrip nello stile di layout Table di un controllo ToolStripPanel.

  • Il pulsante di overflow ToolStrip non viene sottoposto a rendering e la proprietà Overflow viene ignorata.

ToolStripItem

Negli argomenti seguenti vengono descritti la classe ToolStripItem e i relativi controlli derivati.

ToolStripItem è la classe base astratta per tutti gli elementi da inserire in un controllo ToolStrip. Nel modello a oggetti seguente viene illustrata la gerarchia di ereditarietà di ToolStripItem.

Modello a oggetti ToolStripItem

Modello a oggetti ToolStripItem

Le classi ToolStripItem ereditano direttamente da ToolStripItem o indirettamente da ToolStripItem tramite ToolStripControlHost o ToolStripDropDownItem.

I controlli ToolStripItem devono essere contenuti in un controllo ToolStrip, MenuStrip, StatusStrip o ContextMenuStrip e non possono essere aggiunti direttamente a un form. Le varie classi di contenitori sono progettate per contenere un sottoinsieme appropriato di controlli ToolStripItem.

Nella tabella seguente sono elencati i controlli ToolStripItem predefiniti e i contenitori a essi più appropriati. Pur potendo essere incluso in qualsiasi contenitore derivato da ToolStrip, ogni elemento ToolStrip è progettato espressamente per essere inserito nei contenitori seguenti:

Nota

ToolStripDropDown non è presente 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

Yes

ToolStripButton

ToolStripButton è l'elemento pulsante per ToolStrip. È possibile visualizzarlo con vari stili di bordo, nonché utilizzarlo per rappresentare e attivare gli stati operativi. È inoltre possibile definire che abbia lo stato attivo per impostazione predefinita.

ToolStripLabel

ToolStripLabel fornisce la funzionalità di etichetta nei controlli ToolStrip. ToolStripLabel è simile a ToolStripButton, che non riceve lo stato attivo per impostazione predefinita e non viene sottoposto a rendering come premuto o evidenziato.

ToolStripLabel, in quanto elemento ospitato, supporta i tasti di scelta.

Utilizzare le proprietà LinkColor, LinkVisited e LinkBehavior in una classe ToolStripLabel per supportare il controllo di collegamento in un controllo ToolStrip.

ToolStripStatusLabel

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

ToolStripSeparator

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

È possibile aggiungere un controllo ToolStripSeparator in fase di progettazione scegliendolo da un elenco a discesa. È tuttavia anche possibile creare automaticamente un controllo ToolStripSeparator digitando un trattino (-) nel nodo del modello della finestra di progettazione o nel metodo Add.

ToolStripControlHost

ToolStripControlHost è la classe base astratta per ToolStripComboBox, ToolStripTextBox e ToolStripProgressBar. ToolStripControlHost può ospitare altri controlli, tra cui i controlli personalizzati, in due modi:

  • Creare una classe ToolStripControlHost con una classe derivata da Control. Per un accesso completo al controllo contenuto e alle proprietà, è necessario eseguire nuovamente il cast della proprietà Control sulla classe effettiva che rappresenta.

  • Estendere ToolStripControlHost e chiamare il costruttore della classe base nel costruttore predefinito della classe ereditata, passando una classe derivata da Control. L'opzione consente di eseguire il wrapping di proprietà e metodi di controllo comuni per l'accesso semplificato a una classe ToolStrip.

ToolStripComboBox

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

ToolStripTextBox

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

ToolStripProgressBar

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

ToolStripDropDownItem

ToolStripDropDownItem è la classe base astratta per ToolStripMenuItem, ToolStripDropDownButton e ToolStripSplitButton, che possono ospitare direttamente gli elementi o ospitare elementi aggiuntivi in un contenitore a discesa. A tale scopo, impostare la proprietà DropDown su una classe ToolStripDropDown e impostare la proprietà Items della classe ToolStripDropDown. Accedere direttamente a questi elementi a discesa tramite la proprietà DropDownItems.

ToolStripMenuItem

ToolStripMenuItem è una classe ToolStripDropDownItem che, insieme a ToolStripDropDownMenu e ContextMenuStrip, gestisce le funzionalità speciali di evidenziazione, layout e disposizione in colonna per i menu.

ToolStripDropDownButton

ToolStripDropDownButton è simile a ToolStripButton, ma visualizza un'area a discesa quando l'utente fa clic. Nascondere o mostrare la freccia a discesa impostando la proprietà ShowDropDownArrow. ToolStripDropDownButton contiene un oggetto ToolStripOverflowButton che visualizza gli elementi di overflow dell'oggetto ToolStrip.

ToolStripSplitButton

ToolStripSplitButton combina funzionalità di pulsante e pulsante a discesa.

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

Funzionalità generiche di ToolStripItem

ToolStripItem fornisce le seguenti funzionalità e opzioni generiche ai controlli che ereditano:

  • Eventi principali

  • Gestione delle immagini

  • Allineamento

  • Relazione tra testo e immagine

  • Stile di visualizzazione

Eventi principali

I controlli ToolStripItem ricevono gli eventi Click, Mouse e Paint e sono in grado di eseguire anche alcune operazioni di pre-elaborazione da tastiera.

Gestione delle immagini

Le proprietà Image, ImageAlign, ImageIndex, ImageKey e ImageScaling sono relative a vari aspetti della gestione di immagini. Utilizzare le immagini nei controlli ToolStrip impostando direttamente queste proprietà o impostando la proprietà ImageList solo in fase di esecuzione.

Il ridimensionamento dell'immagine è determinato dall'interazione delle proprietà in ToolStrip e ToolStripItem, come segue:

Allineamento

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

Gli elementi vengono inseriti sul controllo ToolStrip nell'ordine in cui appaiono nell'insieme Items. Per modificare a livello di codice la posizione in cui viene inserito un elemento, utilizzare il metodo Insert per spostare l'elemento nell'insieme. Questo metodo sposta l'elemento ma non lo duplica.

Relazione tra testo e immagine

La proprietà TextImageRelation definisce la posizione relativa dell'immagine rispetto al testo in un controllo ToolStripItem. Gli elementi senza immagine, testo o entrambi vengono considerati come casi speciali, in modo che il controllo ToolStripItem non visualizzi uno spazio vuoto al posto dell'elemento o degli elementi mancanti.

Stile di visualizzazione

La proprietà DisplayStyle consente di impostare i valori delle proprietà Text e Image di un elemento visualizzando solo gli elementi desiderati. Questa opzione viene in genere utilizzata per modificare solo lo stile di visualizzazione quando lo stesso elemento viene mostrato in un contesto diverso.

Classi accessorie

Le classi che forniscono varie altre funzionalità includono:

Vedere anche

Riferimenti

Cenni preliminari sul controllo ToolStrip (Windows Form)

Concetti

Riepilogo della tecnologia ToolStrip

Altre risorse

Controllo ToolStrip (Windows Form)

Controllo MenuStrip (Windows Form)

Controllo StatusStrip

Controllo ContextMenuStrip

Controllo BindingNavigator (Windows Form)