2010-05-06 20 views
29

Ho notato che l'aggiunta di MenuStrip (dalla casella degli strumenti) alla progettazione del mio modulo non produce una barra dei menu come quella vista in molte applicazioni native di Windows. Invece ottengo una barra dei menu come proprio di Visual Studio. Nessuna delle impostazioni di stile per MenuStrip sembra imitare la barra dei menu nativa molto più comune.Barre dei menu Windows standard in Windows Form

C'è un modo per aggiungere una barra dei menu alla mia applicazione Windows Form che assomiglia a quella che vedi in Blocco note, Task Manager e altri? (Preferibilmente con il progettista, ma non mi dispiacerebbe l'aggiunta a livello di codice sia.)

Screenshot per dell'illustrazione:

+1

Che dire, è diverso da quello che il menu si trovano in notepad o Windows Explorer? È molto simile a quello trovato nell'ufficio 2003, quindi non è insolito. –

risposta

46

Questo è facile.

Vai alla casella degli strumenti, fai clic con il pulsante destro del mouse ovunque all'interno e seleziona "Scegli elementi". Quando la finestra di dialogo viene caricata e visualizzata, scorrere verso il basso fino a visualizzare MainMenu. Aggiungilo alla casella degli strumenti e avrai una barra dei menu nativa!

Felice codifica!

+3

Wow, non avevo idea di poter aggiungere cose al mio Toolbox in quel modo. Molte grazie! – BoltClock

+0

Prego. Felice di aver aiutato. :) –

+5

Non ero a conoscenza di questo componente. Ho provato e ha * molto * limitato: non ero in grado di cambiare il colore nella finestra di progettazione, nessun supporto per la localizzazione, nessuna immagine, ecc. Se questo è quello che vuoi, prova a farlo. Ci * sono * i motivi per cui questo è stato sostituito da MenuStrip. –

3

Io di solito impostato, singolo colore del RenderMode per System che dà un minimalista MenuStrip menu (nessuna sfumatura o qualcosa di decadente come quello).

Se ciò non dovesse andare abbastanza lontano, probabilmente dovrete saltare attraverso alcuni cerchi di basso livello per ottenere quello che volete.

18

È possibile farlo impostando la proprietà del modulo Menu, in questo modo:

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.Menu = new MainMenu(); 
     MenuItem item = new MenuItem("File"); 
     this.Menu.MenuItems.Add(item); 
      item.MenuItems.Add("Save", new EventHandler(Save_Click)); 
      item.MenuItems.Add("Open", new EventHandler(Open_Click)); 
     item = new MenuItem("Edit"); 
     this.Menu.MenuItems.Add(item); 
      item.MenuItems.Add("Copy", new EventHandler(Copy_Click)); 
      item.MenuItems.Add("Paste", new EventHandler(Paste_Click)); 
     // etc ... 
} 

private void Save_Click(object sender, EventArgs e) 
{ 
    // save 
} 

Questi menu sarà simile menu di sistema "normali".

Non sono riuscito a trovare alcun supporto di progettazione per questo, però. A mia difesa, non ci ho provato molto.

+0

C'è una soluzione più semplice a questo. Può essere trovato nella finestra di dialogo "Scegli elementi". Il componente è chiamato "MainMenu" e ha anche il supporto per la progettazione di moduli. –

+0

Questa è un'ottima risposta. Potrebbe non essere semplice o amichevole come usare il designer, ma non vale la pena di andare giù. – BoltClock

+0

Sono d'accordo. Questa è un'ottima risposta e sarà utile quando sto lavorando a progetti su computer che non hanno un IDE installato! Ho appena provato a fare un uptote, ma la domanda è troppo vecchia e non posso votare finché la domanda non viene modificata, eh? –

7

Invece di utilizzare il componente MainMenu è possibile creare il proprio renderer per il componente MenuStrip. Il vantaggio qui è la possibilità di aggiungere immagini agli oggetti MenuStripItem. Ecco il pastebin per il renderer personalizzato:

NativeRenderer

ci sono diversi temi che possono essere applicati nel costruttore del renderer. Provali tutti per vedere i temi nativi. Per utilizzare questa renderer semplicemente impostare l'istanza alla proprietà renderer MenuStrip:

menuStrip.Renderer = new NativeRenderer([theme]); 
+1

Ooh, questo sembra utile! Se finisco per usarlo (mi sono spostato su [pascoli più verdi] (http://msdn.microsoft.com/en-us/library/ms754130.aspx)), mi piacerebbe molto accreditare il fonte. O è di dominio pubblico? :) – BoltClock

+0

Scusa BoltClock, non mi sono nascosto da un po 'di tempo. Ho cercato di trovare l'autore originale (è stato pubblicato su code.google.com da qualche parte). Pubblicherò il link originale quando lo trovo. –

+0

@BoltClock L'ho trovato! Si prega di dare tutto il merito a questo genio: http://code.google.com/p/szotar/source/browse/trunk/Client/Szotar.WindowsForms/Base/NativeToolStripRenderer.cs –