2016-06-17 3 views
0

私は、異なるフォントサイズを持つ複数のライン機能を持ついくつかのテキストボックスを持っています。今度は、このテキストボックステキストの行の高さを単純なテキストボックスとして知りたいので、各行の高さはリッチテキストボックスではなくテキストボックス全体で同じになります。C#を使用したMultiLine TextBoxでのLineHeight/FontHeightの取得方法

enter image description here

だから我々はC#プログラミングを介して可変でそれを得ることができますか?詳細はスクリーンショットをご覧ください。

答えて

0

おかげ@CodyGray)。あなたはTextRenderer.MeasureTextを必要とするので、そのテキストを描画するGDIを使用して、最終的に私は以下のようにあなたのコードのほんの少しの編集で私の希望の答えを持って、その完璧に取り組んでいます。

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 +で描画されるかのように文字列を測定しますが、内蔵されました。コントロールはすべてあなたの役に立つの返信用

+0

私は今あなたの解決策に少し問題があります。あなたは答えがうまくいきますが、 'textBox1'の上端からのテキストの高さの合計が4行あり、' textBox1'の上端から4行目までの高さです。私の質問は、** LineHeight/FontHeight **を知ることです。フルテキストの高さではありません。では、コードで今更新するものは何ですか? –

+0

私はこのコードを使用しようとしましたが、完璧な結果を与えていません...... 'int pixels; using(Graphics g = textBox1.CreateGraphics()) { float points = textBox1.Font.SizeInPoints; pixels = Convert.ToInt16(ポイント* g.DpiX/72); } MessageBox.Show( "myFontのサイズはピクセル:" + pixels); ' –

+0

私はまた、これを使ってこれをやってみましたが、完璧な結果を与えていません...... int fontHeight = Convert.ToInt32(textBox1 .Font.Size); ' –

関連する問題