Tengo creado una aplición mdi y en los formularios hijos tengo puestos unos iconos, pero cuando maximizo el formulario me aparece muy grande y al inicio del menustrip.
Quisiera que cuando se maximice el formulario o bien se quede el icono como en el formulario normal o bien no aparezca.
Un Saludo.
Estás describiendo el comportamiento normal e implícito de un container MDI, alterar dicho comportamiento de forma natural y sencilla no es posible, un MDI padre necesita dibujar el icono del form hijo al maximizarlo (siempre que tenga una Titlebar), forma parte de su implementación.
Pero puedes subscribirte al evento ItemAdded del MenuStrip para excluir elementos de cierto tipo, como por ejemplo el menu-icono del Form maximizado, que es un item de tipo SystemMenuItem:
Private Sub MenuStrip1_ItemAdded(ByVal sender As Object, ByVal e As ToolStripItemEventArgs) _
Handles MenuStrip1.ItemAdded
e.Item.Visible = e.Item.GetType.Name.Equals("SystemMenuItem")
End Sub
Otra solución (bastante cutre) sería que te suscribas al evento Resize del MDI hijo para asignarle un icono de 1x1 totalmente transparente, y le devuelvas el icono normal al redimensioanrr el form. para esto primero tienes que diseñar el icono, claro está.
Private Sub Form2_Resize(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Resize
Select Case Me.WindowState
Case FormWindowState.Maximized
Me.Icon = My.Resources.TransparentIcon
Case Else
Me.Icon = My.Resources.DefaultIcon
End Select
End Sub
Sobre lo del icono agrandado, hay ciertos bugs descubiertos en alguna versión de .Net Framework respecto al comportamiento del icono de un MDI hijo maximizado, así que no te extrañes si te parece raro, seguramente sea un bug, nunca escuché que el icono se agrandase, pero si otras cosas similares. con forzar una actualización del menu debería ser suficiente para solucionar el (supuesto) bug.
MenuStrip1.SuspendLayout()
Dim mdiChild As New Form2()
mdiChild.WindowState = FormWindowState.Maximized
mdiChild.Show()
MenuStrip1.Visible = Not MenuStrip1.Visible
MenuStrip1.Visible = Not MenuStrip1.Visible
MenuStrip1.ResumeLayout()
Saludos
Muchas Gracias. Solucionado.