none
TextBoxのフォントサイズが設定した値と異なってしまう RRS feed

  • 質問

  • いつもお世話になっております。

    TextBox(あるいはRichTextBox)のフォントサイズについて教えてください。

    LabelとTextBoxがあり、それぞれのFontプロパティにMeiryo UI の9ptを指定すると、
    TextBoxの文字がLabelより小さく表示されてしまいます。
    (プロパティの値自体は同じ値になっていました)

    TextBoxとLabelの文字サイズを同じにしたいのですが、
    TextBoxのフォントサイズが指定通りになる方法、
    あるいは変更されたTextBoxのフォントサイズを取得する方法はありませんでしょうか。

    あるタイミングでTextBoxに入力された文章を、
    入力データの確認画面でLabelに表示した際に、
    折り返し位置が変わってしまってしまうという問題が起きています。
    (正確にはTextBoxの文章量からLabelのサイズを設定したいのですが、
     折り返し位置の違いにより、文章が切れたり余白が大きすぎたりしてしまっています)

    WindowsFormアプリケーションを、VisualStudio 2015、.NET Framework 4.5の環境で作成しております。

    以上、よろしくお願いします。

    2018年12月19日 13:21

回答

  • >> 「見るだけのデータなのにカーソルが入るのが嫌だ」
    ちょっとトリッキーですが、Panel に TextBox を貼り付けて、Panel を EnableWindow API で非活性にすると、色はそのままでカーソルが入らなくなります。

    DrawToBitmap メソッドで Bitmap に描画してそれを PictureBox あたりに貼り付けるのもありかもしれません。
    (スクロールしてしまうと一緒にスクロールします)

    2018年12月20日 6:42

すべての返信

  • LabelのUseCompatibleTextRenderingプロパティを変更してみたらどうなります?
    2018年12月19日 13:39
  • Label の FlatStyle を、System に変更してみてください。
    ほぼ TextBox と同様の大きさになるはずです。

    System の場合は STATIC コントロールがそのまま使われますが、それ以外の場合は .NET がオーナードローしています。


    2018年12月19日 14:19
  • >Hongliangさん
    返信ありがとうございます。

    教えていただいたプロパティで、Labelのサイズ自体はTextBoxと同じになったようです。
    TextBoxの変化ばかり見ていたので、Label側の検討をしていませんでした。
    ただ、描画の開始位置が異なるようなので、そのあたりの調整は必要そうでした。
    そちらについては引き続き検討してみます。


    • 編集済み Toma1988 2018年12月20日 2:38
    2018年12月20日 0:55
  • >KOZ6.0さん
    返信ありがとうございます。

    FlatStyleの変更で、文字サイズが同じになりました。
    描画位置は余白なしで端に寄っていたので、
    TextBoxの描画位置からサイズ調整をすれば合わせることできそうです。

    ただ、TextBoxとLabelで自動折り返しの条件が異なるようで、
    「)」や「。」がつくような場合、TextBoxでは記号のみが次の行になるのですが、
    Labelでは記号の手前の1文字(1単語?)が一緒に次の行になるようでした。

    それについては引き続き調査を進めてみます。


    • 編集済み Toma1988 2018年12月20日 2:38
    2018年12月20日 2:36
  • LabelのほうがTextBoxより軽量で、「表示だけ」には適するとは思います。しかし、自動折り返しまで一致させるなら、LabelをあきらめてTextBoxを替わりに使うほうが手っ取り早いと思います。

    ひとつのオプションとして参考まで。
    • 編集済み 外池 2018年12月20日 2:55
    2018年12月20日 2:54
  • >外池さん

    返信ありがとうございます。

    個人的にはTextBoxをReadOnly=trueで行いたいのですが、
    「見るだけのデータなのにカーソルが入るのが嫌だ」
    ということになりまして・・・。

    TextBoxでカーソルが入らない方法を検討しましたが、
    「Enabledをfalseにすると色が変わって嫌」
    「自分で描画しようとするとうまくいかなかった」
    というのがあり、Labelで再検討している状態です。

    2018年12月20日 5:45
  • >> 「見るだけのデータなのにカーソルが入るのが嫌だ」
    ちょっとトリッキーですが、Panel に TextBox を貼り付けて、Panel を EnableWindow API で非活性にすると、色はそのままでカーソルが入らなくなります。

    DrawToBitmap メソッドで Bitmap に描画してそれを PictureBox あたりに貼り付けるのもありかもしれません。
    (スクロールしてしまうと一緒にスクロールします)

    2018年12月20日 6:42
  • >KOZ6.0さん

    返信ありがとうございます。

    ご提案いただいた2件、試させていただきます。
    (別件を優先しろとのお達しで、せっかく教えていただいたのに、
     すぐに試せなくて申し訳ないですが・・・)

    2018年12月23日 5:25
  • >KOZ6.0さん

    「PanelにTextBoxを貼り付けて~」という方法を試してみたところ、
    イメージしていた挙動になりました。

    ありがとうございます。

    2019年5月8日 0:33