2010-02-01 27 views
19

Tengo un problema extraño con respecto al dimensionamiento automático de un panel en un control de usuario. Este panel está anclado a los 4 lados del control del usuario. Pero el anclaje no siempre funciona como debería:C#: El panel anclado no cambiará el tamaño correctamente

Si el control del usuario cambia de tamaño cambiando el tamaño del formulario, los anclajes derecho e inferior no funcionan. Pero si el control se redimensiona utilizando un divisor que está en la forma, funciona correctamente. Todos los otros controles que también se ven afectados por el cambio de tamaño funcionan correctamente, solo este panel no funcionará.

No puedo ver la diferencia entre cambiar el tamaño a través de un divisor y a través de un formulario.

Configurar manualmente el tamaño en OnResize del UserControl solo funciona si el cambio de tamaño se realiza moviendo el divisor. Si el redimensionamiento se produce al redimensionar el formulario, la altura y el ancho del panel no cambiarán a los nuevos valores.

Editar: Para hacerlo más claro: El control de usuario se agrega a una TabPage y se establece en Dock = DockType.Fill.

Edit2: Para hacerlo más complicado: Esta es la jerarquía que se utiliza el control: El formulario contiene un divisor con 2 controles (A y B). (B) contiene un control de usuario (C) con un splitContainer. El contenedor dividido-> panel1 en (C) contiene un tabcontrol (D). Este control de tabulación (D) contiene un control de usuario (E) (en un tabulador). Este control de usuario (E) tiene un contenedor dividido (F) en el que se coloca otro control de usuario con tabControl (G). Este tabcontrol (G) tiene tabulaciones, y en estas páginas se ubica el control de usuario descrito (H).

Si coloco el control (H) directamente en el panel en el contenedor dividido (C) todo funciona bien. Como todos los controles que se agregan a un contenedor dividido o un tabulador están configurados en docktype = fill, no puedo ver por qué el último control tiene este problema.

¿Existe alguna limitación en el marco de Windows Forms que limite la cantidad de controles secundarios?

Editar: He cargado una Aplicación de prueba con la que puede reproducir este problema. http://rapidshare.de/files/49092516/TestApplication.zip.html Se produce solo en Vista. Win XP y 7 funcionan correctamente ... Si cambia el tamaño del formulario, el cuadro de texto con el botón "..." no cambiará de tamaño, pero si cambia el tamaño a través del splitContainer vertical, funciona.

+2

Podría pegar el código código generado por el diseñador (donde se enlaza todos los controles al mismo tiempo)? Mi primera suposición es que su panel está anclado a un control diferente de lo que piensa (por ejemplo, uno de los paneles de la división) – Grzenio

+0

Eso sería demasiado código para pegar, pero revisé el ancla más de una vez y está configurado correctamente (lo cual se demuestra con un cambio de tamaño de trabajo cuando se usa el divisor) –

Respuesta

35

Hay un error en el anidamiento profundo donde el núcleo se queda sin espacio en la pila, lo que provoca que el cambio de tamaño, el acoplamiento y el anclaje fallen de manera silenciosa.

Ver http://support.microsoft.com/kb/953934

+0

Esta es la solución. ¡Muchas gracias! –

+0

Impresionante. Estaba teniendo este problema exacto yo mismo. Gracias. –

+0

Honestamente, no tenía ninguna esperanza real de encontrar una solución a este problema. Gracias. –

2

Ha hablado de "anclar" y "atracar", lo que puede servir para propósitos similares pero actuar de manera diferente. Su problema puede ser que está tratando de hacer ambas cosas, y esto está interfiriendo con el comportamiento que desea. Si no, quizás intente cambiar de uno a otro.

Parece que ha comprobado dos veces la presencia del control, pero ¿lo examinó con: Ver-> Otro Windows-> Document Outline (una herramienta muy útil que descubrí recientemente)?

Por último, aunque no resuelve directamente su problema, parece que tiene una interfaz de usuario muy complicada, y los usuarios pueden beneficiarse si dedica tiempo a considerar si puede simplificar la interfaz de usuario. Por supuesto, no conozco a tus usuarios o el propósito de la aplicación, y lo que tienes puede ser lo mejor, pero parece que es hora de hacer esta pregunta.

Buena suerte.

+0

Gracias por la sugerencia con la ventana del esquema del documento, es muy útil. Pero debido al problema no solo ocurre en la aplicación externa sino también en la aplicación de prueba simple, no puedo entender por qué debería ser un problema con el anclaje y el acoplamiento combinados. Pero verificare esto. Acerca de la IU: en la aplicación de prueba se ve raro, pero hay una parte dinámica en la aplicación real y algunos elementos pueden estar ocultos. Está aprobado muy a mano por nuestros clientes;) –

1

El problema no es la profundidad de la anidación; los controles se pueden anidar de forma arbitraria. El anclaje y el acoplamiento generalmente no funcionan bien entre sí.Por lo general, estoy a favor del acoplamiento sobre el anclaje, pero, independientemente de la solución que elijas, probablemente debas evitar mezclarlos.

+0

Intenté varias posibilidades con el anclaje y el acoplamiento, pero desafortunadamente esto no ayudó. Parece que debe ser un error en el marco ... –

Cuestiones relacionadas