Respuestas:
Establezca Label
la AutoSize
propiedad en False
, TextAlign
propiedad en MiddleCenter
y Dock
propiedad en Fill
.
Control.Dock
propiedad ( msdn.microsoft.com/en-us/library/… ), puede acoplar (pegar) un control a un cierto lado del contenedor. Por ejemplo Left
, Top
, Right
o Bottom
. Fill
le dice al control que tome todo el espacio disponible en el contenedor.
Dock
entorno.
Dock
La configuración era innecesaria. Cambiar la AutoSize
propiedad le da a la etiqueta un cuadro delimitador que puede ajustar manualmente el tamaño.
Algunos contenidos adicionales menores para configurar mediante programación:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
La alineación de Dockstyle y Content puede diferir de sus necesidades. Por ejemplo, para una etiqueta simple en un formulario wpf, uso DockStyle.None.
Lo logrará estableciendo la propiedad Anchor: None.
Si no desea acoplar la etiqueta en toda el área disponible, simplemente configure el evento SizeChanged en lugar de TextChanged. Cambiar cada letra cambiará la propiedad de ancho de la etiqueta, así como su texto cuando la propiedad de tamaño automático esté establecida en Verdadero. Entonces, por cierto, puede usar cualquier fórmula para mantener la etiqueta centrada en la forma.
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
La respuesta aceptada no funcionó para mí por dos razones:
BackColor
configuré AutoSize = false
y Dock = Fill
hace que el color de fondo llene todo el formularioAutoSize
todos modos, no podría haber establecido en falso porque el texto de mi etiqueta era dinámicoEn cambio, simplemente usé el ancho del formulario y el ancho de la etiqueta para calcular el desplazamiento izquierdo:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
Quería hacer algo similar, pero en un formulario con una imagen de fondo, descubrí que cuando el texto en la etiqueta cambiaba, los repintes eran obvios con este método, así que hice lo siguiente: * Establecer la etiqueta AutoSize en true y TextAlign en MiddleCenter
Luego, cada vez que el texto cambiaba (el mío se hacía usando un temporizador) llamé al siguiente método:
private Point GetPosition()
{
int y = (this.Height / 2) - (label1.Height / 2);
int x = (this.Width / 2) - (label1.Width / 2);
return new Point(x, y);
}
Y establezca la propiedad Ubicación de la etiqueta en este valor de retorno. Esto aseguró que la etiqueta siempre estaba en el centro del formulario cuando el texto cambiaba y los repintes para un formulario de pantalla completa no eran obvios.
Puede probar el siguiente fragmento de código:
private Point CenterOfMenuPanel<T>(T control, int height=0) where T:Control {
Point center = new Point(
MenuPanel.Size.Width / 2 - control.Width * 2,
height != 0 ? height : MenuPanel.Size.Height / 2 - control.Height / 2);
return center;
}
Es realmente centro