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.
- Utilizando
Anchor
propiedad - Usando el control de diseño con la ayuda de
Docking
yAnchor
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
- Agregue TableLayout Control, establezca su propiedad Dock en Relleno.
- Agregue 1 fila con estilo de tipo de tamaño Porcentaje 100%
- 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%)).
- Ahora agregue Panel Control a Column2 y configure su propiedad Dock para Rellenar
- 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.