掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TextBoxの一行の文字数を設定するには?(等幅フォント使用) (ID:146583)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんにちは。 複数行入力できるテキストボックス(あるいはリッチテキストボックス)の一行の全角文字数が固定になるように、 テキストボックスの幅を設定したいと思っています。 自分なりに色々調べたところ、System.Drawing.GraphicsのMeasureStringメソッドを使用すると、 文字数に応じたテキスト領域の幅が得られると思い試しているのですが、うまくいきません。 以下に試したコードを記載します。 '--------------------------------------------------------- Const DISP_TEXT As String = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" Dim fnt As New Font("MS ゴシック", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte)) Dim g As Graphics = TextBox1.CreateGraphics() Dim intWidth As Integer = System.Math.Ceiling(g.MeasureString(clsUtil.RepeatString("亜", 20), fnt).Width) TextBox1.Font = fnt TextBox1.Text = DISP_TEXT TextBox1.ClientSize = New Size(intWidth, TextBox1.ClientSize.Height) '--------------------------------------------------------- 実行結果では、21文字目である「な」から次の行に折り返しされることを期待したのですが、 実際は19文字目の「て」から次の行に表示されてしまいます。 (これはTextBox1.ScrollBarがVerticalの場合の結果です。また、TextBox1.ScrollBarがNoneの場合は、 上記の結果とは異なりますが、やはり21文字目からの折り返しは発生しません。) テキストボックスの代わりにリッチテキストボックスを使用しても結果は同じでしたが、 ラベル(AutoSize=Falseにしたもの)で試してみると、こちらはちゃんと21文字目からの折り返しが発生しています。 そこで、同じフォントのラベルとテキストボックスを上下に並べて配置し、同じテキストをセットしてみると、 どうやら文字送りの幅がラベルとテキストボックスとでは違うようなのです(テキストボックスの方が文字送りの幅が大きい)。 従って、ラベルのテキスト幅はGraphics.MeasureStringでOKだと思うのですが、 テキストボックスの場合のテキスト幅を得るにはどうすればよいでしょうか? 使用しているのはVB 2008です。宜しくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.