[英]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.