掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TextBoxの一行の文字数を設定するには?(等幅フォント使用) (ID:146584)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まず、System.Graphics は描画コンポーネントとして GDI+ を使用しています。しかし WinForm の TextBox は Windows のコモンコントロールを使って実装されており、これは GDI を使って画面を操作します。 この違いはテキストの描画にも及んでおり、テキストボックスに表示される文字列の幅と Graphics.MeasureString で計測される文字列の幅には差が存在しています。 GDI を使って文字列を描画などするために、WinForm は TextRenderer クラスを用意してあります。このクラスには MeasureText メソッドも用意されており、これで GDI で描画されるときの文字列の幅を計測できます。 なお、Label は、Application.SetCompatibleTextRenderingDefault メソッド及び Label.UseCompatibleTextRendering プロパティによって文字列を GDI+ で描画するか GDI で描画するか切り替えられるようになっています。 // で、アプリケーションフレームワークを使ったデフォルトでは GDI 使うはずだったと思うんですが……。 それから、ClientSize はどうも ScrollBars がらみが適当なようです。 たとえば ClientSize の Width に 200 を設定したとします。縦スクロールバーの幅が 15 とすると、ClientSize.Width は 200 を報告しますが、実際に設定されている(スクロールバーを除いた)クライアント領域の幅は 185 になります。その後、一旦 ScrollBars.None にしてもう一度 ScrollBars.Vertical にすると ClientSize.Width は 185 を報告するようになります。 // 確認した環境は 日本語版 Windows Vista SP1, .NET Framework 2.0 SP1。 この動作が環境を問わない普遍的なものとすると、ClientSize を設定する際、Width には ScrollBars を確認して Vertical が含まれている場合は SystemInformation.VerticalScrollBarWidth をプログラム側で足しておかなければならないと言うことになります。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.