C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: Windowsのフォント設定で中や大を選択されている場合


(過去ログ 103 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■61680 / inTopicNo.1)  Windowsのフォント設定で中や大を選択されている場合
  
□投稿者/ たか@WEB屋 (23回)-(2011/08/27(Sat) 11:57:29)

分類:[.NET 全般] 

2011/08/27(Sat) 12:16:38 編集(投稿者)

.netframework3.5でWindowsアプリを作っています。

フォームのサイズ変更にあわせてアプリ内の領域をResize()イベントで書き換える処理を書いていて
通常はうまく動作するのですが Windowsのフォントの設定で中とか大を選択されていた場合に表示が崩れてしまいます。


以下の■の部分がフォームのサイズに応じてサイズが変更される部分、
□がフォームのサイズに寄らず常に同じ大きさの部分です。


■■■■□□
■■■■□□
■■■■□□
■■■■□□
■■■■□□
■■■■□□

ですので 横幅を広げると↓みたいに増えます。
■■■■■■□□
■■■■■■□□
■■■■■■□□
■■■■■■□□
■■■■■■□□
■■■■■■□□

 ■の横幅= form.Size.Width - □の横幅(固定の数字);

としているのですがWindowsのフォントサイズを中とか大にしていると■が大きく表示されすぎて
こんな感じに□が小さくなってしまいます。
■■■■■■■□
■■■■■■■□
■■■■■■■□
■■■■■■■□
■■■■■■■□
■■■■■■■□

デバッグで見ていくと□のLocationを指定している部分が悪さをしているようで
この一文をコメントアウトすると初期値ではうまく描画できました。
(もちろんリサイズした時にメニューが動かずこのままではダメなのですが)

□のロケーション.X = form.Size.Width - ■.Size.Width

みたいに指定しているのですがこの部分どう修正すれば上記のケースでも対応できるのでしょうか?
この対処法を教えてください。


なおWindowのフォントサイズを中を選んだ場合(125%)と書いてあったので試しに
□のロケーション.X = form.Size.Width - ■.Size.Width/1.25
とするとうまく描画でいます。

ということはWindowsのフォントサイズを取得してそれに応じて再描画すればいいのか?とも思いますがフォントサイズの取得の仕方がわかりませんし
そもそもそんな面倒なことしなくても何か方法が用意されていそうな気もします(なにせどちらもマイクロソフトの設計なのですから)


何かご存じでしたらよろしくお願いいたします。
引用返信 編集キー/
■61681 / inTopicNo.2)  Re[1]: Windowsのフォント設定で中や大を選択されている場合
□投稿者/ たか@WEB屋 (24回)-(2011/08/27(Sat) 13:09:13)
自己解決しました。

FormのAutoScaleModeをFont(たぶん既定値)からNoneにしたところ解決しました。

解決済み
引用返信 編集キー/
■61682 / inTopicNo.3)  Re[1]: Windowsのフォント設定で中や大を選択されている場合
□投稿者/ よねKEN (721回)-(2011/08/27(Sat) 13:10:50)
No61680 (たか@WEB屋 さん) に返信
> □のロケーション.X = form.Size.Width - ■.Size.Width
>
> みたいに指定しているのですがこの部分どう修正すれば上記のケースでも対応できるのでしょうか?
> この対処法を教えてください。

■(左側)と□(右側)はPanelか何かを配置してその上に中身を構成するコントロールを配置している感じでしょうか?

■の方をDockプロパティをFillに、□の方をDockプロパティをRightに設定しておき、
□のWidthだけ計算してやればよいと思います。(ロケーションの計算は必要ありません)

※Dockプロパティなどのレイアウト関係のプロパティについては↓が参考になるでしょう。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard18.htm

> ということはWindowsのフォントサイズを取得してそれに応じて再描画すればいいのか?とも思いますがフォントサイズの取得の仕方がわかりませんし

□で確保したい幅は何に依存して決まるのかわかりませんが、
折り返しなどせず表示したい実際のテキストが決まっているなら、
GraphicsクラスのMeasureStringメソッドを使ってそのテキストの幅を求めればよいと思います。

※文字列を描画したときの大きさを計測する
http://dobon.net/vb/dotnet/graphics/measurestring.html
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -