Yanıtlar:
Set Label'in AutoSizeözellik için False, TextAlignmülk için MiddleCenterve Dockmülkiyet için Fill.
Control.Dockmülkiyet ( msdn.microsoft.com/en-us/library/... ), siz (sopa) kabın belli bir tarafına bir denetim yerleştirebilirsiniz. Örneğin Left, Top, Rightya da Bottom. Fillkontrole kaptaki tüm kullanılabilir alanı almasını söyler.
Dockayar için bir şey yapmak zorunda değildi .
Dockayar gereksizdi. AutoSizeÖzelliğin değiştirilmesi, etikete boyutunu manuel olarak ayarlayabileceğiniz bir sınırlama kutusu verir.
Programlı olarak ayarlamak için bazı ek içerikler:
Label textLabel = new Label() {
AutoSize = false,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.None,
Left = 10,
Width = myDialog.Width - 10
};
Dockstyle ve İçerik hizalama gereksinimlerinizden farklı olabilir. Örneğin, bir wpf formunda basit bir etiket için DockStyle.None kullanın.
Anchor: None özelliğini ayarlayarak elde edersiniz.
Etiketi kullanılabilir alanın tamamına yerleştirmek istemiyorsanız, TextChanged yerine SizeChanged olayını ayarlamanız yeterlidir. Her bir harfi değiştirmek, otomatik boyut özelliği True olarak ayarlandığında etiketin width özelliğini ve metnini değiştirir. Bu nedenle, etiketi formda ortalamak için herhangi bir formülü kullanabilirsiniz.
private void lblReport_SizeChanged(object sender, EventArgs e)
{
lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}
Kabul edilen cevap benim için iki nedenden dolayı işe yaramadı:
BackColorayarı böylece ayarlanır AutoSize = falseve Dock = Filltüm formunu doldurmak için arka plan rengini neden olurAutoSizebenim etiket metni dinamik olduğu için yanlış oldu Neyse ayarlıBunun yerine, sol ofseti hesaplamak için formun genişliğini ve etiket genişliğini kullandım:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
Ben benzer bir şey yapmak istedim, ama arka plan görüntüsü olan bir formda, etiketindeki metin değiştiğinde yeniden boyamaları bu yöntemle açık olduğunu buldum, bu yüzden aşağıdakileri yaptım: * AutoSize etiketini true ve TextAlign olarak ayarlayın MiddleCenter
Sonra, metin her değiştiğinde (benim bir zamanlayıcı kullanılarak yapıldı) aşağıdaki yöntemi çağırdım:
private Point GetPosition()
{
int y = (this.Height / 2) - (label1.Height / 2);
int x = (this.Width / 2) - (label1.Width / 2);
return new Point(x, y);
}
Etiketin Konum özelliğini bu dönüş değerine ayarlayın. Bu, metin değiştiğinde etiketin her zaman formun merkezinde olmasını sağladı ve tam ekran formun boyaması belli değildi.
Aşağıdaki kod snippet'ini deneyebilirsiniz:
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;
}
Gerçekten Merkez
