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.