2016-06-17 46 views

回答

0

感謝您的有益答覆@CodyGray,最後我得到了我想要的答案,只是你的代碼編輯如下,它的工作完美。

int lineHeight; 
using (Graphics g = textBox1.CreateGraphics()) 
{ 
    lineHeight = Convert.ToInt32(g.MeasureString("A", textBox1.Font).Height); 
} 
1

要測量文本,請使用TextRender.MeasureText

如果你不感興趣的寬度,你可以調用函數在一個非常簡單的方法:

int textHeight; 
using (Graphics g = textBox1.CreateGraphics()) 
{ 
    textHeight = TextRenderer.MeasureText(g, textBox1.Text, textBox1.Font).Height; 
} 

正如你所說的,如果每行使用相同的字體(因爲它會爲一個文本框) ,那麼每條線都有相同的高度,所以你可以用高度乘以線數。但您也可以使用TextRenderer.MeasureText來確定顯示文本所需的寬度和高度。例如:

Size szText; 
using (Graphics g = textBox1.CreateGraphics()) 
{ 
    szText = TextRenderer.MeasureText(g, 
             textBox1.Text, 
             textBox1.Font, 
             textBox1.ClientSize, 
             TextFormatFlags.Left 
             | TextFormatFlags.Top 
             | TextFormatFlags.NoPrefix 
             | TextFormatFlags.TextBoxControl); 
} 

(還有一個Graphics.MeasureString方法,做一些非常相似,但不使用它,它衡量的字符串,如果它是由GDI +繪製,但內置的。控制所有使用GDI繪製他們的文本,所以你需要TextRenderer.MeasureText。)

+0

我現在對您的解決方案有點問題。你的答案工作正常,但它給我的文本總高度來自'textBox1'的頂部邊界的文本意味着我有4行文本,然後它給我從'textBox1'的頂部邊框到第4行文本的高度。但是什麼我的問題是要知道** LineHeight/FontHeight **只有不是全文的高度。那麼現在在代碼中更新什麼???? –

+0

我試過用這個代碼,但是它也沒有給出完美的結果...... 'int pixels; using(Graphics g = textBox1.CreateGraphics()) { float points = textBox1.Font.SizeInPoints; pixels = Convert.ToInt16(points * g.DpiX/72); (「myFont size in pixels:」+ pixels);' –

+0

我也嘗試過使用它,但它也沒有給出完美的結果......'int fontHeight = Convert.ToInt32(textBox1 .Font.Size);' –

相關問題