簡體   English   中英

重寫/更改.NET Winforms標簽控件的字體垂直對齊行為

[英]Override/Change .NET Winforms Font Vertical Alignment Behavior for Label Control

我有一個常規標簽,其TextAlign屬性設置為MiddleCenter。 該標簽旨在保留帶有分鍾和秒的時間值,並將其用作秒表。

如果字體較小,則標簽將正確垂直對齊。 但是,隨着字體大小的增加,垂直對齊成為問題。

在此處查看屏幕截圖,您將明白我的意思:

屏幕截圖

據我了解,我認為.NET在技術上是正確的-從字體的意義上來說,垂直對齊是正確的,因為諸如字體上升和下降之類的事情。 但是,在這種情況下,這確實不符合我的需求。 在屏幕截圖中,標簽的頂部比標簽的底部具有更多的空間。 當數字顯示時,我希望這兩部分相等。 我僅使用數字和冒號,因此我對如果包含其他字符(例如“ g”)的外觀不感興趣,例如“ g”顯然會使像素懸掛在基線以下。

我嘗試調整填充以強制執行此行為,但這只是導致文本被裁剪,.NET不允許我使用負填充/邊距。 有什么簡單的方法可以在這里完成我想要的嗎? 我還嘗試手動編輯ttf字體文件並更改字體上升/下降,以便.NET對其進行不同的對齊,但無法弄清楚。 謝謝你的建議。

我正在使用的字體文件已在此處下載: http : //www.fontspace.com/style-7/digital-7

看起來,如果比例很大,則文本只是“下沉”,並最終被截斷。

在Form ResizeEnd事件上嘗試以下操作:

    label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
    //First make the font big enough
    double fontSize = label1.Width / label1.Text.Count();
    int height = label1.Height;
    fontSize = fontSize > 0 ? (double)fontSize : 1;
    if (fontSize < (height / 2))
    {
        fontSize = (height / 2);
    }
    label1.Font = new System.Drawing.Font(label1.Font.FontFamily, (float)fontSize, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

    //then adjust the text to the label size
    while (label1.Width < System.Windows.Forms.TextRenderer.MeasureText(label1.Text,
        new Font(label1.Font.FontFamily, label1.Font.Size, label1.Font.Style)).Width ||
        label1.Height < System.Windows.Forms.TextRenderer.MeasureText(label1.Text,
        new Font(label1.Font.FontFamily, label1.Font.Size, label1.Font.Style)).Height)
    {
        label1.Font = new Font(label1.Font.FontFamily, label1.Font.Size > 1 ? label1.Font.Size - 0.5f : label1.Font.Size, label1.Font.Style);
        if (label1.ClientRectangle.Width < 3 || label1.ClientRectangle.Height < 3)
            break;
    }

我修改了這個: https : //stackoverflow.com/a/9645577/1027551

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM