2012-01-12 12 views
5

Desidero creare un menu di scelta rapida con più colonne. In sostanza sarebbe andata così:Posso creare un menu contestuale a più colonne in Windows Windows Forms?

First item | [common option] | All Options > 
Second item | [common option] | All Options > 
Third item | [common option] | All Options > 
Fourth item | [common option] | All Options > 

Quindi, in pratica ci sono un sacco di elementi (generata in fase di esecuzione), ogni elemento può essere lanciato da solo; o con un'opzione comunemente usata; oppure puoi ottenere un sottomenu con tutte le opzioni possibili.

Come posso fare questo? Sto cercando di abusare sia di ContextMenuStrip e di ContextMenu, ma non sembrano avere tali opzioni. Ancora mi sembra di ricordare di aver visto menu a più colonne da qualche parte ...

Preferirei una soluzione Windows Form, perché non ho alcuna esperienza WPF. Oh, e questo menu contestuale si aprirà quando si fa clic su un'icona nell'area di notifica (nota anche come systray).

risposta

5

Non so su ContextMenuStrip, che è un menu interamente costruito in codice .NET, ma si può sicuramente farlo con ContextMenu, che è un wrapper sui menu di sistema nativi.

La chiave sta impostando i MFT_MENUBREAK o MFT_MENUBARBREAK flag per la voce di menu individuale (s), che sono esposti come proprietà nella MenuItem class involucro: MenuItem.Break e MenuItem.BarBreak, rispettivamente.

Il primo posiziona semplicemente la voce di menu in una nuova colonna, mentre il secondo posiziona l'elemento in una nuova colonna e separa la colonna con una linea verticale incisa.

Dall'esempio MSDN:

public void CreateMyMenus() 
{ 
    // Create three top-level menu items. 
    MenuItem menuItem1 = new MenuItem("&File"); 
    MenuItem menuItem2 = new MenuItem("&New"); 
    MenuItem menuItem3 = new MenuItem("&Open"); 

    // Set the BarBreak property to display horizontally. 
    menuItem2.BarBreak = true; 
    menuItem3.BarBreak = true; 

    // Add menuItem2 and menuItem3 to the menuItem1's list of menu items. 
    menuItem1.MenuItems.Add(menuItem2); 
    menuItem1.MenuItems.Add(menuItem3); 
} 
0

I menu di WinForms possono essere creati solo come alberi: è possibile avere un sottomenu sotto ciascun elemento. Quindi puoi inserire l'opzione comune come prima voce del sottomenu.

Non può apparire diverso se non si progetta il proprio controllo (e quindi WPF è molto più adatto per questa attività, ma WPF impiega molto tempo per apprendere).

+0

Beh, va bene, ma non posso organizzare il primo livello del mio albero in modo che si articola in 3 colonne? Non è necessario che i 3 articoli siano correlati tra loro (eccetto per posizionamento). –

+0

No, non puoi. –

+2

Certo che puoi. I menu nativi di Win32 supportano questo bene. Ora, se è buona la progettazione dell'interfaccia utente è ancora discutibile, ma certamente non è necessario utilizzare WPF. Questa è una risposta fuori dal comune che vedo troppo spesso qui intorno. Ci sono * molte * buone ragioni per le persone * e * per voler usare WPF. –

Problemi correlati