tamaño formularios formulario escala controles automático ajuste ajustar c# winforms dynamic user-controls

controles - ajuste automático de escala en formularios windows forms c#



C#: Cómo obtener un control de usuario para autoajustarse correctamente (5)

Tengo un UserControl que consta de una Label (arriba), un FlowLayoutPanel (relleno, flujo TopDown y sin envoltura) y un Panel (inferior). El control de usuario crea una serie de controles, basados ​​en una lista de cosas que obtiene, y los agrega al FlowLayoutPanel .

¿Cómo puedo hacer que UserControl se redimensione correctamente para que el FlowLayoutPanel no tenga barras de desplazamiento? He intentado usar varias combinaciones de AutoSize y AutoSizeMode en el FlowLayoutPanel y el UserControl sí, pero parece que no puedo hacerlo funcionar. O termino con algo que no cambia de tamaño en absoluto, o no llega a ser lo suficientemente grande o se aplasta hasta casi nada.


Al agregar un control a la distribución de flujo, puede cambiar el tamaño de los controles ya agregados al tamaño requerido sin obtener las barras de desplazamiento para el panel de diseño de flujo.


Descubrí que la mejor manera de resolver esto era usar algún código en el evento ControlAdded en el panel flowlayout para ajustar la altura del panel (la altura porque estaba usando el flujo TopDown) para que sea:

e.Control.Location.Y + e.Control.Height + some margin

y establecer la propiedad AutoSize en el control de usuario en True.

También necesitarías hacer algunas sugerencias de anclaje y anclaje según la respuesta de Mickel.

Esta funcionalidad se puede encapsular en su propio control heredado de FlowLayoutPanel y anular el método ControlAdded.


Envolver el FlowLayoutPanel en un TableLayoutPanel permitirá el adecuado comportamiento de autosize.

Su UserControl debería verse así:

UserControl TableLayoutPanel (Dock-Fill) Row1 : Label Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize) Row3 : Panel

De nuevo, cuando use ese UserControl , es posible que deba envolverlo en TableLayoutPanel utilizando una fila o columna de TableLayoutPanel .

Esté atento a SplitContainers ya que a menudo desequilibran los comportamientos de SplitContainers .


Gracias por todas las sugerencias. La solución esta vez pareció configurar AutoSize en true para FlowLayoutPanel y UserControl .

Ahora, cómo obtener el formulario que contendrá este UserControl , así como algunos otros controles, que no puedo entender por el momento, pero supongo que debería ser una pregunta separada ...


Puede usar la propiedad Anclar y Dock del UserControl para establecer opciones para que los bordes de su control se "peguen" a otras partes de su UI. Cuando la UI se redimensiona, ¡su control seguirá!

Si usa los anclajes y la base en todos los controles en su control de usuario y los establece para acoplar los bordes del control, los controles cambiarán el tamaño con el UserControl y ahora también puede establecer anclajes / dock para UserControl.