No se maximiza un formulario MDIChild

03/05/2006 - 19:40 por Joaquín Zarco Gomis | Informe spam
Hola a todos.

Tengo una aplicación MDI en Visual Basic.net 2005 y en el formulario
hijo le indico que arranque maximizado, pero el borde del formulario no se
extiende dentro del formulario padre (aunque si el controlbox).

Esto es un bug? ¿o estoy haciendo algo mal?

También noto problemas de refresco en controles dentro de un splitContainer

Preguntas similare

Leer las respuestas

#6 Ceiger
08/05/2006 - 12:57 | Informe spam
A mi me pasa exactamente lo mismo. Si te das cuenta, si minimizas la
aplicacion y la vuelves a maximizar, veras que buala, sale el form
maximizado.Incluso si abres otro form despues de este, el segundo siempre lo
dibuja bien. Creo que es un bug, yo acabo de crear un form nuevo, le he
copiado todos los controles y el codigo, y ahora funciona bien, me lo dibuja
maximizado, pero me da un error al salir del form: "La cadena de ordenación
contiene una propiedad que no está en IBindingList."

Ya ves, misterios de la informatica.


Saludos.

"Joaquín Zarco Gomis" escribió en el mensaje
news:
Muchas gracias por el mensaje, me ha quedado bastante claro el tema de que
como funcionan las ventanas MDI.

El otro problema de que al abrir un formulario maximizado queda
recortado el borde lo he resuelto asignando al formulario el tamaño máximo
porque de lo contrario me aparece los botones del Controlbox en su lugar
(como si estuviese maximizado). El resto del formulario se ajusta a la
posición 0,0 (sin mostrar el título como si estuviera maximizado también)
pero el ancho y alto del formulario no cambia y se muestra con el tamaño
definido por size.




"Luis Miguel Blanco" escribió
en el mensaje news:
Hola Joaquín

Respecto a la cuestión que comentas del formulario que se abre maximizado
cuando lo tienes configurado como normal, no es una cuestión de mal
funcionamiento, sino de conceptos sobre la arquitectura de Windows,
intentaré
explicarte el motivo de este comportamiento sobre el que ya comenté hace
unas
semanas a otra persona que expuso el mismo problema:

La funcionalidad básica de una ventana MDI consiste en actuar como
contenedora de otras ventanas hijas, utilizando su superficie (la de la
ventana MDI) como espacio de trabajo para dichas ventanas hijas.

Cuando abrimos varias ventanas hijas no maximizadas dentro de una MDI,
dado
que su propiedad WindowState es Normal, podemos mantener el tamaño de
cada
una de estas ventanas y pasar el foco entre las mismas, puesto que aunque
sea
mínimo, la ventana MDI dispone en su superficie de un espacio compartido
para
representarlas/mostrarlas todas. Haz la siguiente prueba: en primer lugar
añade un MenuItem al MainMenu de la MDI, y en su propiedad MdiList le
asignas
el valor True, con ello tendrás en la MDI el clásico menú desplegable con
una
opción por cada ventana hija que abras dentro de la MDI. A continuación
abre
sin maximizar las dos ventanas hijas, a una de ellas le das tamaño
suficiente
para que abarque toda la superficie de la MDI, pero siempre sin
maximizar;
ahora pasa al menú de la MDI, y selecciona la otra ventana hija, verás
como
se sitúa encima de la que acabas de redimensionar. En este caso tienes
ambas
ventanas disponibles, pero también ten en cuenta que ninguna está
maximizada.

Sin embargo, en cuanto maximizas una de las ventanas hijas, dicha ventana
maximizada ocupa todo el área cliente de la ventana MDI, y en este caso,
a la
MDI le resulta imposible representar simultáneamente más de una ventana,
es
decir, que en ese momento si intentamos "traer" a primer plano una
ventana
hija con WindowState Normal por encima de la ventana hija maximizada,
Windows
no dispone de una pequeña porción de superficie de la ventana MDI para
mostrar la ventana hija normal, ya que todo el área de trabajo de la MDI
está
siendo ocupado por la que actualmente tenemos maximizada. Para resolver
esto,
y siempre y cuando haya una ventana hija maximizada, Windows cambia el
WindowState de todas las hijas a Maximized.

Prueba lo siguiente: pon la propiedad WindowState de las dos ventanas
hijas
a Normal, ejecuta la aplicación y abre las ventajas hijas; maximiza una
de
ellas, y mediante el menú de ventana que has añadido a la MDI pasa a la
otra
hija, verás que también se ha maximizado sin que tú hicieras nada, esto
ha
sido debido al comportamiento de Windows que te he explicado
anteriormente.

Para que además no pienses que tienes "duendes" en tu aplicación, puedes
probarlo con cualquier aplicación "oficial" que tenga una estructura MDI.
Access es el más claro ejemplo de ello. Abre Access y una base de datos.
Seguidamente abre un par de tablas y maximiza cualquiera de las ventanas
hijas que tengas en ese momento abiertas en Access. Finalmente, desde el
menú
Ventana de Access, pasa a cualquier otra ventana hija que originalmente
no
estaba maximizada, "et voilá", ahora sí lo estará.

Espero que todo este rollo que acabo de soltar te sea de utilidad 8-)
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Joaquín Zarco Gomis" wrote:

Solo lo he logrado solucionar dando al formulario el temaño máximo.

Por otro lado si abro un formulario maximizado y luego abro otro que
tiene
puesto que se abra normal, en lugar de abrirlo normal lo maximiza

"Jorge Serrano [MVP VB]"

escribió
en el mensaje news:
> Hola,
>
> estoy creando una mini demo con un control ToolStrip con botones
> estándar.
>
> En el primero de ellos escribo el siguiente código:
>
> Private Sub NuevoToolStripButton_Click(ByVal sender As
> System.Object,
> ByVal e As System.EventArgs) Handles NuevoToolStripButton.Click
> Dim MiF As New Form2
> MiF.MdiParent = Me
> MiF.WindowState = FormWindowState.Maximized
> MiF.Show()
> End Sub
>
> Evidentemente, el primer Formulario (Form1) es el padre y el Form2 el
> hijo.
>
> Los formularios hijos aparecen maximizados.
>
> ¿Qué código estás utilizando?.
>
> Un saludo.
>
> Jorge Serrano Pérez
> Microsoft MVP VB.NET
> PortalVB.com
> http://www.portalvb.com/
> Weblog de Jorge Serrano
> http://weblogs.golemproject.com/jorge/
>
>
> "Joaquín Zarco Gomis" wrote:
>
>> Hola a todos.
>>
>> Tengo una aplicación MDI en Visual Basic.net 2005 y en el
>> formulario
>> hijo le indico que arranque maximizado, pero el borde del formulario
>> no
>> se
>> extiende dentro del formulario padre (aunque si el controlbox).
>>
>> Esto es un bug? ¿o estoy haciendo algo mal?
>>
>> También noto problemas de refresco en controles dentro de un
>> splitContainer
>>
>>
>>









Respuesta Responder a este mensaje
#7 Ceiger
08/05/2006 - 18:51 | Informe spam
He estado editando el archivo .designer.vb del form que me da problemas, y
me he dado cuenta que si no tengo esta linea en donde se deblara los
controles que hay en el form, no me funciona, pongo esta linea, y me
maximiza bien el form. El tema, es que yo he asignado la variable
windowsstate del form, ha una variable de configuracion del sistema.
Me.DataBindings.Add(New System.Windows.Forms.Binding("WindowState",
Global.GestionComercial.My.MySettings.Default, "Tama¤oVentana", True,
System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged))

Haber si alguien lo entiende.

Saludos.

"Ceiger" escribió en el mensaje
news:
A mi me pasa exactamente lo mismo. Si te das cuenta, si minimizas la
aplicacion y la vuelves a maximizar, veras que buala, sale el form
maximizado.Incluso si abres otro form despues de este, el segundo siempre
lo dibuja bien. Creo que es un bug, yo acabo de crear un form nuevo, le he
copiado todos los controles y el codigo, y ahora funciona bien, me lo
dibuja maximizado, pero me da un error al salir del form: "La cadena de
ordenación contiene una propiedad que no está en IBindingList."

Ya ves, misterios de la informatica.


Saludos.

"Joaquín Zarco Gomis" escribió en el mensaje
news:
Muchas gracias por el mensaje, me ha quedado bastante claro el tema de
que como funcionan las ventanas MDI.

El otro problema de que al abrir un formulario maximizado queda
recortado el borde lo he resuelto asignando al formulario el tamaño
máximo porque de lo contrario me aparece los botones del Controlbox en su
lugar (como si estuviese maximizado). El resto del formulario se ajusta a
la posición 0,0 (sin mostrar el título como si estuviera maximizado
también) pero el ancho y alto del formulario no cambia y se muestra con
el tamaño definido por size.




"Luis Miguel Blanco"
escribió en el mensaje
news:
Hola Joaquín

Respecto a la cuestión que comentas del formulario que se abre
maximizado
cuando lo tienes configurado como normal, no es una cuestión de mal
funcionamiento, sino de conceptos sobre la arquitectura de Windows,
intentaré
explicarte el motivo de este comportamiento sobre el que ya comenté hace
unas
semanas a otra persona que expuso el mismo problema:

La funcionalidad básica de una ventana MDI consiste en actuar como
contenedora de otras ventanas hijas, utilizando su superficie (la de la
ventana MDI) como espacio de trabajo para dichas ventanas hijas.

Cuando abrimos varias ventanas hijas no maximizadas dentro de una MDI,
dado
que su propiedad WindowState es Normal, podemos mantener el tamaño de
cada
una de estas ventanas y pasar el foco entre las mismas, puesto que
aunque sea
mínimo, la ventana MDI dispone en su superficie de un espacio compartido
para
representarlas/mostrarlas todas. Haz la siguiente prueba: en primer
lugar
añade un MenuItem al MainMenu de la MDI, y en su propiedad MdiList le
asignas
el valor True, con ello tendrás en la MDI el clásico menú desplegable
con una
opción por cada ventana hija que abras dentro de la MDI. A continuación
abre
sin maximizar las dos ventanas hijas, a una de ellas le das tamaño
suficiente
para que abarque toda la superficie de la MDI, pero siempre sin
maximizar;
ahora pasa al menú de la MDI, y selecciona la otra ventana hija, verás
como
se sitúa encima de la que acabas de redimensionar. En este caso tienes
ambas
ventanas disponibles, pero también ten en cuenta que ninguna está
maximizada.

Sin embargo, en cuanto maximizas una de las ventanas hijas, dicha
ventana
maximizada ocupa todo el área cliente de la ventana MDI, y en este caso,
a la
MDI le resulta imposible representar simultáneamente más de una ventana,
es
decir, que en ese momento si intentamos "traer" a primer plano una
ventana
hija con WindowState Normal por encima de la ventana hija maximizada,
Windows
no dispone de una pequeña porción de superficie de la ventana MDI para
mostrar la ventana hija normal, ya que todo el área de trabajo de la MDI
está
siendo ocupado por la que actualmente tenemos maximizada. Para resolver
esto,
y siempre y cuando haya una ventana hija maximizada, Windows cambia el
WindowState de todas las hijas a Maximized.

Prueba lo siguiente: pon la propiedad WindowState de las dos ventanas
hijas
a Normal, ejecuta la aplicación y abre las ventajas hijas; maximiza una
de
ellas, y mediante el menú de ventana que has añadido a la MDI pasa a la
otra
hija, verás que también se ha maximizado sin que tú hicieras nada, esto
ha
sido debido al comportamiento de Windows que te he explicado
anteriormente.

Para que además no pienses que tienes "duendes" en tu aplicación, puedes
probarlo con cualquier aplicación "oficial" que tenga una estructura
MDI.
Access es el más claro ejemplo de ello. Abre Access y una base de datos.
Seguidamente abre un par de tablas y maximiza cualquiera de las ventanas
hijas que tengas en ese momento abiertas en Access. Finalmente, desde el
menú
Ventana de Access, pasa a cualquier otra ventana hija que originalmente
no
estaba maximizada, "et voilá", ahora sí lo estará.

Espero que todo este rollo que acabo de soltar te sea de utilidad 8-)
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Joaquín Zarco Gomis" wrote:

Solo lo he logrado solucionar dando al formulario el temaño máximo.

Por otro lado si abro un formulario maximizado y luego abro otro que
tiene
puesto que se abra normal, en lugar de abrirlo normal lo maximiza

"Jorge Serrano [MVP VB]"

escribió
en el mensaje
news:
> Hola,
>
> estoy creando una mini demo con un control ToolStrip con botones
> estándar.
>
> En el primero de ellos escribo el siguiente código:
>
> Private Sub NuevoToolStripButton_Click(ByVal sender As
> System.Object,
> ByVal e As System.EventArgs) Handles NuevoToolStripButton.Click
> Dim MiF As New Form2
> MiF.MdiParent = Me
> MiF.WindowState = FormWindowState.Maximized
> MiF.Show()
> End Sub
>
> Evidentemente, el primer Formulario (Form1) es el padre y el Form2 el
> hijo.
>
> Los formularios hijos aparecen maximizados.
>
> ¿Qué código estás utilizando?.
>
> Un saludo.
>
> Jorge Serrano Pérez
> Microsoft MVP VB.NET
> PortalVB.com
> http://www.portalvb.com/
> Weblog de Jorge Serrano
> http://weblogs.golemproject.com/jorge/
>
>
> "Joaquín Zarco Gomis" wrote:
>
>> Hola a todos.
>>
>> Tengo una aplicación MDI en Visual Basic.net 2005 y en el
>> formulario
>> hijo le indico que arranque maximizado, pero el borde del formulario
>> no
>> se
>> extiende dentro del formulario padre (aunque si el controlbox).
>>
>> Esto es un bug? ¿o estoy haciendo algo mal?
>>
>> También noto problemas de refresco en controles dentro de un
>> splitContainer
>>
>>
>>













email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida