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

#1 Jorge Serrano [MVP VB]
03/05/2006 - 20:56 | Informe spam
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
#2 Joaquín Zarco Gomis
04/05/2006 - 08:33 | Informe spam
Hola Jorge, gracias por la respuesta

Uso el mismo código que indicas pero no me funciona. Parece que se
maximiza porque los botones de minimizar y maximizar están bajo los
correspondientes del formulario padre, pero el borde del formulario tiene el
mismo tamaño que en diseño.


"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
#3 Joaquín Zarco Gomis
04/05/2006 - 09:45 | Informe spam
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
#4 Luis Miguel Blanco
04/05/2006 - 10:46 | Informe spam
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
#5 Joaquín Zarco Gomis
04/05/2006 - 13:26 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida