Menús.

01/02/2007 - 16:33 por Ira | Informe spam
Hola,

Es una pregunta tan sencilla que me da vergüenza preguntarla. ¿Cómo se le
cambia la fuente a los menús creados para un formulario?. Realmente lo que
quiero es cambiar el tamaño porque me salen muy chiquititos. He creado los
menús en tiempo de diseño, no en tiempo de ejecución.

gracias,
 

Leer las respuestas

#1 Ira
05/02/2007 - 17:28 | Informe spam
Excelente respuesta,

Mil Gracias,


"Luis Miguel Blanco" escribió
en el mensaje news:
Hola Ira

No he podido ver la imagen que adjuntas ya que utilizo Internet Explorer
para consultar este foro y debe ser que limita la capacidad de adjuntar
archivos. No obstante hay algo que se me pasó por alto en mi anterior
respuesta, y es que supongo que debes estar utilizando Visual Studio 2003
para desarrollar tu aplicación, puesto que en esta versión, en efecto, los
controles MainMenu y MenuItem no disponen de la propiedad Font para
asignar
el tipo de letra a las diversas opciones del menú.

Mi respuesta asumía que estabas utilizando Visual Studio 2005, donde los
controles utilizados para la construcción de un menú sí que disponen de la
propiedad Font para poder asignar esta característica.

No obstante, desde Visual Studio 2003 también puedes establecer el tipo de
letra para las opciones de tu menú, aunque esta tarea no se puede hacer en
tiempo de diseño, sino que debes hacerla desde el código del formulario. A
continuación te explico los pasos básicos que debes dar:

Supongamos que en un formulario añadimos un menú con la siguiente
estructura:

-Archivo
-Abrir
-Salir

...el objeto MenuItem correspondiente a la opción "Abrir" tiene el nombre
MenuItem2, y "Salir" el nombre MenuItem3. Estas opciones son las que
queremos
que tengan un tipo de letra distinto al que asigna el diseñador de
formularios.

Para conseguir este objetivo necesitamos realizar una operación de dibujo
personalizado (owner draw) de estos elementos del menú. Esto significa que
debemos escribir un método manipulador del evento que se produzca cuando
la
opción solicite que se le asignen sus medidas, y otro manipulador para el
evento en el que la opción solicite que sea dibujada. Algo parecido al
siguiente bloque de código.

'//////////////////////////
Private Sub MedirOpcionMenu(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MeasureItemEventArgs)
' establecer las medidas para las opciones de menú
e.ItemHeight = 30
e.ItemWidth = 100
End Sub

Private Sub DibujarOpcionMenu(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DrawItemEventArgs)
' crear el tipo de letra
Dim oFont As Font
oFont = New Font("Comic Sans MS", 12, FontStyle.Bold)

' obtener la opción de menú que se va a dibujar
Dim oMenuItem As MenuItem
oMenuItem = CType(sender, MenuItem)

' dibujar el fondo de la opción
e.DrawBackground()
' dibujar el texto de la opción en su área correspondiente
e.Graphics.DrawString(" " & oMenuItem.Text, _
oFont, New SolidBrush(e.ForeColor), _
e.Bounds.X, e.Bounds.Y)
End Sub
'//////////////////////////

No obstante, esto no es suficiente, ya que el hecho de escribir este
código
no va a hacer que las opciones ya sean dibujadas según esta
personalización,
debemos establecer qué objetos MenuItem van a ser dibujados según nuestro
código personalizado.

La forma de indicar a un objeto MenuItem que la operación de dibujo
queremos
realizarla nosotros, pasa por asignar el valor True a su propiedad
OwnerDraw,
asignando también a sus eventos MeasureItem y DrawItem los manipuladores
que
hemos escrito anteriormente. Esto es algo que podemos hacer en el evento
Load
del formulario, como puedes ver en el siguiente bloque de código:

'//////////////////////////
Private Sub Form1_Load(ByVal sender As Object, ByVal e As
System.EventArgs)
Handles MyBase.Load
' configurar opciones
Me.MenuItem2.OwnerDraw = True
AddHandler Me.MenuItem2.DrawItem, AddressOf DibujarOpcionMenu
AddHandler MenuItem2.MeasureItem, AddressOf MedirOpcionMenu

Me.MenuItem3.OwnerDraw = True
AddHandler Me.MenuItem3.DrawItem, AddressOf DibujarOpcionMenu
AddHandler MenuItem3.MeasureItem, AddressOf MedirOpcionMenu
End Sub
'//////////////////////////

A partir de ahora, cuando despliegues el menú para ver sus opciones, se
ejecutará tu código de dibujo personalizado, mostrando la opción según el
tipo de letra que le has asignado.

Partiendo de esta base, puedes personalizar el menú tanto como necesites,
mostrando por ejemplo iconos al lado de cada opción. El siguiente artículo
de
Dino Esposito amplia estos conceptos que te acabo de explicar, por si
necesitas información adicional:

http://msdn.microsoft.com/msdnmag/i...fault.aspx

Desde Visual Studio 2005 todas estas operaciones sí que pueden ser
realizadas en tiempo de diseño, ya que los controles que esta versión
incluye
para diseñar menús, disponen de las propiedades correspondientes, lo que
facilita esta tarea enormemente.

Espero haberte servido de ayuda.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Ira" wrote:

Hola Luis,

Gracias por contestarme. Tanto en el control mainmenu como en los
menuitem,
no aparece ninguna propiedad Font.
Te adjunto la pantalla propiedades del mainmenu y del menuitem
:

¿¿¿¿¿Font??????



"Luis Miguel Blanco"
escribió
en el mensaje news:
> Hola Ira
>
> Simplemente debes seleccionar el control MenuItem y pasar a la ventana
> de
> propiedades, aquí eliges la propiedad Font y modificas su valor por el
> del
> tipo de letra que necesites. Esto se aplicará a todas las opciones del
> menú,
> pero si quieres, también puedes hacerlo por opciones independientes,
> utilizando la misma propiedad Font.
>
> Espero que te haya servido de ayuda.
>
> Un saludo
> Luis Miguel Blanco
> http://www.dotnetmania.com
>
>
> "Ira" wrote:
>
>> Hola,
>>
>> Es una pregunta tan sencilla que me da vergüenza preguntarla. ¿Cómo se
>> le
>> cambia la fuente a los menús creados para un formulario?. Realmente lo
>> que
>> quiero es cambiar el tamaño porque me salen muy chiquititos. He creado
>> los
>> menús en tiempo de diseño, no en tiempo de ejecución.
>>
>> gracias,
>>
>>
>>
>>



Preguntas similares