2010-05-06 12 views
29

Noté que agregar MenuStrip (desde Toolbox) a mi diseño de formulario no produce una barra de menú como la que se ve en muchas aplicaciones nativas de Windows. En cambio, obtengo una barra de menú como la de Visual Studio. Ninguno de los ajustes de estilo para MenuStrip parece imitar la barra de menú nativa mucho más común.Barras de menú estándar de Windows en Windows Forms

¿Hay alguna manera de agregar una barra de menú a mi aplicación Windows Forms que se ve igual a la que ve en el Bloc de notas, el Administrador de tareas y otros? (Preferiblemente con el diseñador, pero no me importaría añadiéndolo programación tampoco.)

Captura de la ilustración:

+1

¿Y es tan diferente que el menú que se encuentra en el bloc de notas o el Explorador de Windows? Es muy similar a la encontrada en Office 2003, por lo que no es inusual. –

Respuesta

46

Esto es fácil.

Vaya a su Caja de herramientas, haga clic derecho en cualquier lugar dentro y seleccione "Elegir elementos". Cuando el diálogo se carga y aparece, desplácese hacia abajo hasta que vea MainMenu. ¡Añádelo a la caja de herramientas y obtendrá una Barra de menús nativa!

Happy coding!

+3

Guau, no tenía idea de que pudiera agregar cosas a mi Toolbox así. ¡Muchas gracias! – BoltClock

+0

De nada. Feliz de haber ayudado. :) –

+5

No tenía conocimiento de este componente. Lo probé y tiene * muy * limitado: no pude cambiar el color en el diseñador, no hay soporte para localización, no hay imágenes, etc. Si esto es lo que quieres, hazlo. * Hay * razones por las cuales esto ha sido reemplazado por MenuStrip. –

3

normalmente puse, solo color de RenderMode a System que da un minimalista la MenuStrip menú (sin gradientes ni nada decadente como ese).

Si eso no va lo suficientemente lejos, entonces es probable que deba pasar por algunos niveles bajos para obtener lo que desea.

18

Usted puede hacer esto mediante el establecimiento de la propiedad de su forma Menu, así:

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 
} 

Estos menús se parecerán a los menús del sistema "normales".

No he encontrado ningún diseñador de soporte para esto, sin embargo. En mi defensa, no lo intenté muy duro.

+0

Hay una solución más fácil para esto. Se puede encontrar en el cuadro de diálogo "Elegir elementos". El componente se llama "MainMenu" y también tiene soporte de Form Designer. –

+0

Esta es una gran respuesta. Puede que no sea tan simple o amigable como usar el diseñador, pero no vale la pena bajar de tono. – BoltClock

+0

Estoy de acuerdo. Esta es una gran respuesta, ¡y será útil cuando estoy trabajando en proyectos en computadoras que no tienen un IDE instalado! Solo traté de volver a votar, pero dice que la pregunta es demasiado antigua, y no puedo votar hasta que se edite la pregunta, ¿eh? –

7

En lugar de usar el componente MainMenu, puede crear su propio procesador para el componente MenuStrip. La ventaja aquí es poder agregar imágenes a los objetos MenuStripItem. Aquí está la Pastebin para el intérprete personalizado:

NativeRenderer

Hay diferentes temas que se pueden aplicar en el constructor del procesador. Pruébalos todos para ver los temas nativos. Para utilizar este procesador basta con establecer la instancia a la propiedad MenuStrip Procesador:

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

Ooh, ¡esto parece útil! Si termino usándolo (me mudé un poco a [pastos más verdes] (http://msdn.microsoft.com/en-us/library/ms754130.aspx)), me gustaría dar crédito al fuente. ¿O es de dominio público? :) – BoltClock

+0

Lo siento, BoltClock, no he acechado aquí en bastante tiempo. He intentado encontrar el autor original (se publicó en code.google.com en algún lugar). Publicaré el enlace original cuando lo encuentre. –

+0

@BoltClock ¡Lo encontré! Dale todo el crédito a este genio: http://code.google.com/p/szotar/source/browse/trunk/Client/Szotar.WindowsForms/Base/NativeToolStripRenderer.cs –