(1)在窗體中測(cè)量字符串
使用System.Drawing.Graphics的MeasureString函數(shù) 主要用它的2個(gè)重載函數(shù)
(1)Graphics.MeasureString 方法 (String, Font) ,測(cè)量用指定的 Font 對(duì)象繪制的指定字符串,返回 SizeF 結(jié)構(gòu)。返回的SizeF就是測(cè)量字符串的打印在屏幕上的寬度和高度,默認(rèn)以像素為單位,與Form中控件Size的單位一致。該函數(shù)重載中還含有一個(gè) StringFormat參數(shù),如果未指定這個(gè)參數(shù),那么將使用StringFormat.GenericDefault返回的StringFormat進(jìn)行測(cè)量,這個(gè)測(cè)量結(jié)果比較大。如果使用StringFormat.GenericTypographic參數(shù)測(cè)量,結(jié)果比較小。
(2)public SizeF MeasureString(string text,Font font,SizeF layoutArea,StringFormat stringFormat, out int charactersFitted, out int linesFilled); 這個(gè)函數(shù)能測(cè)量使用指定字體和指定矩形區(qū)域中能容納字符串的長(zhǎng)度和行數(shù),其中,layoutArea為一個(gè)容納字符串的矩形區(qū)域; stringFormat為字符串的對(duì)齊方式,字符間距,是否保持詞組在同一行等屬性(這個(gè)參數(shù)很重要);charactersFitted返回能容納的字符的數(shù)目;linesFilled返回能容納字符的行數(shù)。 重點(diǎn):默認(rèn)的情況下Graphics返回的結(jié)果是用像素作為單位,設(shè)置PageUnit屬性可以改變這種狀態(tài)。窗體中創(chuàng)建Graphics實(shí)例直接可以使用Control.CreateGraphics 方法。
(2)在打印時(shí)測(cè)量字符串(ActiveReport)
兩點(diǎn)注意:
(1) Graphics對(duì)象由打印機(jī)創(chuàng)建pDoc.PrinterSettings.CreateMeasurementGraphics();
(2) 由于帳票的控件Size均以inch(英寸)或者厘米為單位,所以獲得Graphics實(shí)例后把PageUnit屬性設(shè)置為GraphicsUnit.Inch;
下面是其它網(wǎng)友的補(bǔ)充:
做一個(gè)畫圖表的系統(tǒng),圖表有標(biāo)題框,標(biāo)題框的大小是固定的,它不是Textbox,是通過函數(shù)畫的一個(gè)矩形,可以在里面輸入標(biāo)題,我如何得知輸入的字符串的空間長(zhǎng)度,不是Length.例如,我的標(biāo)題框的Width = 150, Heigth = 15 ,那有什么庫(kù)函數(shù)可以計(jì)算輸入的字符串的Width? 請(qǐng)大仙幫助小女子,謝謝
string str = "測(cè)試用的字符串";
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
Size size = TextRenderer.MeasureText(str, this.Font);
Rectangle rect = new Rectangle(20, 20, size.Width, size.Height);
TextRenderer.DrawText(e.Graphics, str, this.Font, rect, Color.Blue, Color.Yellow);
e.Graphics.DrawRectangle(SystemPens.ControlDarkDark, rect);
}
嘿嘿,問題解決了,非常感謝zswang,MeasureString方法很好用,給你加分哦
也很感謝hbxtlhx
新聞熱點(diǎn)
疑難解答
圖片精選