Bir etiketi WinForms'da nasıl ortalayabilirim?


137

Gelen WinFormsbir kullanıyorum Labelvb başarı, başarısızlık gibi farklı mesajlar gösterilecek

Bu etiketi orta formda ortalamak istiyorum. Etikette tek bir kelime veya bütün bir cümle olsun, merkezde kalmasını sağlayacak bir çözüm istiyorum.

Yanıtlar:


281

Set Label'in AutoSizeözellik için False, TextAlignmülk için MiddleCenterve Dockmülkiyet için Fill.


teşekkürler decyclone, işe yaradı. u plz Dock ne yapar rehberlik edebilir?
haansi

3
İle 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.
decyclone

1
Etiketin kullanabileceği tüm alanı doldurmasını istemiyorsanız, Dock özelliğini, programlı çözümünde user3866622 tarafından önerildiği gibi "Yok" olarak ayarlamak isteyebilirsiniz.
Tim

3
Çalıştı, ama Dockayar için bir şey yapmak zorunda değildi .
Jim Fell

4
Dockayar gereksizdi. AutoSizeÖzelliğin değiştirilmesi, etikete boyutunu manuel olarak ayarlayabileceğiniz bir sınırlama kutusu verir.
Nick Roberts

13

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.



10

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;
}

2

Kabul edilen cevap benim için iki nedenden dolayı işe yaramadı:

  1. Ben vardı BackColorayarı böylece ayarlanır AutoSize = falseve Dock = Filltüm formunu doldurmak için arka plan rengini neden olur
  2. Ben olamazdı AutoSizebenim 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;

1

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.


1

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

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.