remarks cref c# winforms controls
http://rapidshare.de/files/49092516/TestApplication.zip.html

cref - remarks c#



C#: Panel anclado no cambiará de tamaño correctamente (3)

El problema no es la profundidad de anidación; Los controles pueden ser anidados arbitrariamente profundos. El anclaje y el acoplamiento generalmente no juegan bien entre sí. Por lo general, prefiero el acoplamiento sobre el anclaje, pero, independientemente de la solución que elija, probablemente debería evitar mezclarlos.

Tengo un problema extraño con respecto al tamaño 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:

Si el control del usuario cambia de tamaño al cambiar el tamaño del formulario, los anclajes derecho e inferior no funcionan. Pero si el control cambia de tamaño utilizando un divisor que está en el formulario, funciona correctamente. Todos los demás controles que también se ven afectados por el cambio de tamaño funcionan correctamente, solo que 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.

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

Editar: Para que quede más claro: el control del usuario se agrega a una TabPage y se establece en Dock = DockType.Fill.

Edit2: para hacerlo más complicado: esta es la jerarquía en la que se usa 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 control de tabulación (D). Este control de tabulación (D) contiene un control de usuario (E) (en una página de pestaña). Este control de usuario (E) tiene un splitcontainer (F) en el que se coloca otro control de usuario con un control de pestañas (G). Este control de tabulación (G) tiene pestañas, y en estas páginas se encuentra el control de usuario descrito (H).

Si coloco el control (H) directamente en el panel en el contenedor de split (C), todo funciona bien. Dado que todos los controles que se agregan a un contenedor de división o una página de pestaña están configurados en docktype = fill, no puedo ver por qué el último control tiene estos problemas.

¿Hay 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 Ocurre solo en Vista. Win XP y 7 funcionan correctamente ... Si cambia el tamaño del formulario, la caja de texto con el botón "..." no cambiará el tamaño, pero si lo ajusta a través del splitContainer vertical, funcionará.


Ha hablado tanto de "ancla" como de "muelle", que pueden tener 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, tal vez intente cambiar de uno a otro.

Parece que ha verificado dos veces la respuesta del control, pero lo examinó con: Ver-> Otras ventanas-> Resumen del documento (una herramienta muy útil que descubrí recientemente).

Finalmente, aunque no resuelve directamente su problema, parece que tiene una IU muy complicada, y sus usuarios pueden beneficiarse si dedica algún tiempo a considerar si podría simplificar la IU. Por supuesto, no conozco a tus usuarios ni el propósito de la aplicación, y lo que tienes puede ser el mejor, pero parece que podría ser el momento de hacer esta pregunta.

Buena suerte.