Saltar al contenido

Alinear controles para centrar en un FlowLayout

Esta es el arreglo más válida que te podemos aportar, pero estúdiala detenidamente y valora si se adapta a tu proyecto.

Solución:

Puedes hacerlo de dos formas pero con alguna limitación de cada una.

  1. Utilizando Anchor propiedad
  2. Usando el control de diseño con la ayuda de Docking y Anchor propiedades

Método 1: propiedad de anclaje

Los controles están anclados de forma predeterminada en la parte superior izquierda del formulario, lo que significa que cuando se cambie el tamaño del formulario, su distancia desde la parte superior izquierda del formulario permanecerá constante. Si cambia el ancla de control a la parte inferior izquierda, entonces el control mantendrá la misma distancia de los lados inferior e izquierdo del formulario cuando se cambie el tamaño del formulario.

Desactivar el ancla en una dirección mantendrá el control centrado en esa dirección al cambiar el tamaño.

Ejemplo :

public TestForm12()

   InitializeComponent();

   Button btn = new Button();
   btn.Width = this.Width - 10;
   btn.Height = 20;
   btn.Left = (this.ClientSize.Width - btn.Width) / 2;
   btn.Top = (this.ClientSize.Height - btn.Height) / 2;
   btn.Text = "click me";
   this.Controls.Add(btn);
   btn.Anchor = AnchorStyles.None;               


2. Usando el control de diseño

  1. Agregue TableLayout Control, establezca su propiedad Dock en Relleno.
  2. Agregue 1 fila con estilo de tipo de tamaño Porcentaje 100%
  3. Agregue 3 columnas Columna 1 (Tipo de tamaño – Porcentaje (100%)), Columna 2 (Tipo de tamaño – Absoluto (200px)), Columna 3 (Tipo de tamaño – Porcentaje (100%)).
  4. Ahora agregue Panel Control a Column2 y configure su propiedad Dock para Rellenar
  5. Agregue botones a este control y establezca su tamaño como desee y establezca su propiedad de anclaje en AnchorStyles.Left | AnchorStyles.Derecha | AnchorStyles.Top

Ejemplo: fragmento de código Designer.cs del formulario.

private void InitializeComponent()
  System.Windows.Forms.AnchorStyles.Left) 
    

 #endregion

private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button1;

Espero que esto ayude..

Yo iría con TableLayoutPanel en su lugar:

  • Pon TableLayoutPanel en tu formulario
  • Establecer estilo de muelle Fill al panel
  • Dejar solo una columna dentro del panel
  • Cree una fila para cada botón (y coloque botones en las celdas de la tabla)
  • Establecer tipo de tamaño de fila Autosize
  • Establecer estilo de muelle Fill a todos los botones, excepto al último
  • Establecer estilo de muelle Top hasta el último botón

Por cierto, en su solución, debe iterar sobre los controles de flowLayoutPanel en lugar de los controles de formulario. También considere restar el margen horizontal y el relleno del ancho:

foreach (Control control in flowLayoutPanel.Controls)

    control.Size = new Size(flowLayoutPanel.Width - control.Margin.Horizontal,
                            control.Height); 

Pero le aconsejo que use TableLayoutPanel en su lugar.

Resolví esto cambiando los valores de margen. Sin embargo, estoy agregando mi contenido a un panel.

C#:

int horizontalMargin = (int)(0.5 * (this.containingPanelOrForm.Width - this.button.Width));
this.btnOptX.Margin = new Padding(horizontalMargin, 0, horizontalMargin, 0);

Comentarios y valoraciones

Puedes asentar nuestro quehacer mostrando un comentario o valorándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *