Respostas:
Defina Label
a AutoSize
propriedade de False
, TextAlign
propriedade de MiddleCenter
e Dock
propriedade de Fill
.
Control.Dock
propriedade ( msdn.microsoft.com/en-us/library/… ), você pode encaixar (colar) um controle em um determinado lado do contêiner. Por exemplo Left
, Top
, Right
ou Bottom
. Fill
informa ao controle para ocupar todo o espaço disponível no contêiner.
Dock
cenário.
Dock
configuração era desnecessária. Alterar a AutoSize
propriedade fornece ao rótulo uma caixa delimitadora na qual você pode ajustar manualmente o tamanho.
Algum conteúdo adicional secundário para configuração programaticamente:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
O alinhamento entre o estilo das docas e o conteúdo pode diferir das suas necessidades. Por exemplo, para um rótulo simples em um formulário wpf, uso DockStyle.None.
Você conseguirá isso com a propriedade de configuração Anchor: None.
Se você não deseja encaixar o rótulo em toda a área disponível, basta definir o evento SizeChanged em vez de TextChanged. A alteração de cada letra altera a propriedade width do label e o texto quando a propriedade de dimensionamento automático é definida como True. Portanto, a propósito, você pode usar qualquer fórmula para manter o rótulo centralizado no formulário.
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
A resposta aceita não funcionou para mim por dois motivos:
BackColor
definido isso AutoSize = false
e Dock = Fill
faz com que a cor do plano de fundo preencha todo o formulárioAutoSize
definido como falso de qualquer maneira, porque o texto do meu marcador era dinâmicoEm vez disso, simplesmente usei a largura do formulário e a largura do rótulo para calcular o deslocamento esquerdo:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
Eu queria fazer algo semelhante, mas em um formulário com uma imagem de plano de fundo, descobri que, quando o texto no rótulo era alterado, as repetições eram óbvias com esse método, então fiz o seguinte: * Defina o tamanho automático do rótulo como true e TextAlign como MiddleCenter
Então, toda vez que o texto mudava (o meu era feito usando um timer), chamei o seguinte 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);
}
E defina a propriedade Location do rótulo para esse valor de retorno. Isso garantiu que o rótulo estivesse sempre no centro do formulário quando o texto foi alterado e as alterações de novo para um formulário em tela cheia não eram óbvias.
Você pode experimentar o seguinte snippet 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;
}
É realmente centro