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

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

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

Re[8]: Windowsのディスプレイ文字サイズ変更時の問題


(過去ログ 115 を表示中)

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

■67969 / inTopicNo.1)  Windowsのディスプレイ文字サイズ変更時の問題
  
□投稿者/ namara1991 (1回)-(2013/09/12(Thu) 09:47:04)

分類:[VB.NET/VB2005 以降] 

VB2008・Windows 7

Windowsフォームを作成していて、困ったことが起こりました。

Windowsのコントロールパネルで、ディスプレイ(テキストやその他の項目の大きさの変更)で中サイズや大サイズを選択すると、
表示されるコントロール内のテキストがコントロールからはみ出たり、配置したコントロールが重なりあったりしてしまいます。
開発時のディスプレイ設定は、既定の小サイズでした。

この問題を回避するにはどうすればよいでしょうか?

よろしくお願いします。
引用返信 編集キー/
■67973 / inTopicNo.2)  Re[1]: Windowsのディスプレイ文字サイズ変更時の問題
□投稿者/ 魔界の仮面弁士 (338回)-(2013/09/12(Thu) 12:49:19)
No67969 (namara1991 さん) に返信
> この問題を回避するにはどうすればよいでしょうか?

・想定的にフォントサイズを下げて、元の解像度で表示されるよう調整する。
・フォントサイズの拡大にあわせて、フォームサイズやコントロール位置を拡大する。
・画面に入りきらないなら、AutoScroll などの併用を検討する。

などでしょうか。手動調整のためのコードが必要になる場合もありますが、
さしあたっては Form の AutoScaleMode プロパティについて調べてみてください。
http://dobon.net/vb/dotnet/form/autoscale.html
引用返信 編集キー/
■67974 / inTopicNo.3)  Re[2]: Windowsのディスプレイ文字サイズ変更時の問題
□投稿者/ namara1991 (2回)-(2013/09/12(Thu) 16:09:50)
No67973 (魔界の仮面弁士 さん) に返信
> ■No67969 (namara1991 さん) に返信
>>この問題を回避するにはどうすればよいでしょうか?
>
> ・想定的にフォントサイズを下げて、元の解像度で表示されるよう調整する。
> ・フォントサイズの拡大にあわせて、フォームサイズやコントロール位置を拡大する。
> ・画面に入りきらないなら、AutoScroll などの併用を検討する。
>
> などでしょうか。手動調整のためのコードが必要になる場合もありますが、
> さしあたっては Form の AutoScaleMode プロパティについて調べてみてください。
> http://dobon.net/vb/dotnet/form/autoscale.html

ありがとうございます。
教えて頂いたサイトを参考に、AutoScaleModeプロパティをDpiにすると、
ほぼ問題が解決しました。
ただし、以下のコントロールのサイズがおかしくなります。

・マルチラインのTextBoxの高さ(異常に長くなり、このTextBoxの下にあるコントロールを隠してしまう)
・デザイナであらかじめ列を追加したDataGridViewの列ヘッダの高さ

これらのサイズはフォーム起動時にコード上で再計算しなくてはなりませんか?
引用返信 編集キー/
■67975 / inTopicNo.4)  Re[3]: Windowsのディスプレイ文字サイズ変更時の問題
□投稿者/ 魔界の仮面弁士 (339回)-(2013/09/12(Thu) 16:36:29)
No67974 (namara1991 さん) に返信
> ・マルチラインのTextBoxの高さ(異常に長くなり、このTextBoxの下にあるコントロールを隠してしまう)
フォントの高さと行間が増えたとすれば、その分増加するとは思いますが、
異常ということは、それよりも遙かに長くなるということでしょうか?
(10行分の高さだったものが、30行入る高さになってしまうなど?)

> ・デザイナであらかじめ列を追加したDataGridViewの列ヘッダの高さ
列ヘッダのセルスタイルが WrapMode = True に設定されていた場合、
列幅が不足するとテキスト表示が折り返されて複数行になるため、
その場合は列ヘッダの行高さが増える可能性がありそうです。

並び順を示す△▽マークの表示を許可している場合には、
その分の幅も確保せねばなりませんね。

> これらのサイズはフォーム起動時にコード上で再計算しなくてはなりませんか?
細かい調整は、適宜必要かもしれません。
引用返信 編集キー/
■67977 / inTopicNo.5)  Re[4]: Windowsのディスプレイ文字サイズ変更時の問題
□投稿者/ namara1991 (3回)-(2013/09/12(Thu) 17:00:01)
早速のご回答誠にありがとうございます。


No67975 (魔界の仮面弁士 さん) に返信
> ■No67974 (namara1991 さん) に返信
>>・マルチラインのTextBoxの高さ(異常に長くなり、このTextBoxの下にあるコントロールを隠してしまう)
> フォントの高さと行間が増えたとすれば、その分増加するとは思いますが、
> 異常ということは、それよりも遙かに長くなるということでしょうか?
> (10行分の高さだったものが、30行入る高さになってしまうなど?)

このTextBoxは、Panel内に配置しており、TextBox下端の下にボタンが配置されている状態なのですが、
ディスプレイの文字サイズを中以上にすると、実行時にこのTextBoxが下のボタンを隠してしまいます。
(デザインモードでの表示では、下のボタンを隠すことはありませんでした。)

ただ、TextBoxの高さについては、フォーム起動前に下のコントロールとの位置関係を元に再計算することにより
対応できました。


>>・デザイナであらかじめ列を追加したDataGridViewの列ヘッダの高さ
> 列ヘッダのセルスタイルが WrapMode = True に設定されていた場合、
> 列幅が不足するとテキスト表示が折り返されて複数行になるため、
> その場合は列ヘッダの行高さが増える可能性がありそうです。
>
> 並び順を示す△▽マークの表示を許可している場合には、
> その分の幅も確保せねばなりませんね。

やはり微調整が必要ですね。
そこで、DataGridViewの列ヘッダの高さ・幅を再計算するために、ディスプレイの文字サイズが何になっているか
(あるいは小-100%・中-125%・大-150%のような拡大率)を取得したいのですが、VBからこの情報を取得することは可能ですか?

お手数をお掛けいたしますが、よろしくお願いします。
引用返信 編集キー/
■67980 / inTopicNo.6)  Re[5]: Windowsのディスプレイ文字サイズ変更時の問題
□投稿者/ 魔界の仮面弁士 (341回)-(2013/09/12(Thu) 17:48:20)
No67977 (namara1991 さん) に返信
> やはり微調整が必要ですね。
あるいは、SPREAD for Windows Forms などといった
スケーリングに対応した有償製品を利用するとか。
http://d.hatena.ne.jp/Yamaki/20130308/1362728843


> そこで、DataGridViewの列ヘッダの高さ・幅を再計算するために、ディスプレイの文字サイズが何になっているか
> (あるいは小-100%・中-125%・大-150%のような拡大率)を取得したいのですが、VBからこの情報を取得することは可能ですか?
参考情報として。
http://yk.tea-nifty.com/netdev/2009/09/windows7-150-26.html
引用返信 編集キー/
■67985 / inTopicNo.7)  Re[6]: Windowsのディスプレイ文字サイズ変更時の問題
□投稿者/ namara1991 (4回)-(2013/09/13(Fri) 17:21:12)
いつもありがとうございます。勉強になります。


No67980 (魔界の仮面弁士 さん) に返信
> ■No67977 (namara1991 さん) に返信
>>やはり微調整が必要ですね。
> あるいは、SPREAD for Windows Forms などといった
> スケーリングに対応した有償製品を利用するとか。
> http://d.hatena.ne.jp/Yamaki/20130308/1362728843
>
>
>>そこで、DataGridViewの列ヘッダの高さ・幅を再計算するために、ディスプレイの文字サイズが何になっているか
>>(あるいは小-100%・中-125%・大-150%のような拡大率)を取得したいのですが、VBからこの情報を取得することは可能ですか?
> 参考情報として。
> http://yk.tea-nifty.com/netdev/2009/09/windows7-150-26.html


有償品のグリッドを使うつもりはないので、コントロールのグラフィックスのDpi/96で割合を出し、
それにグリッドのセル幅・セル高さを乗じることで、対応できました。
教えて頂いたサイトの内容につきましては、ちょっとハードルが高そうなので、時間のあるときに勉強します。

なお、昨日、MultiLineのTextBoxの高さがおかしくなる、というコメントをしましたが、ListBox系の高さもおかしくなりました。
(もっとも、ListBoxは行単位の高さしか設定できないので、高さ調整したところで、中途半端なサイズになってしまいますが。)

一応、何とか対応はできたようなので、このスレッドをクローズします。
解決済み
引用返信 編集キー/
■67987 / inTopicNo.8)  Re[7]: Windowsのディスプレイ文字サイズ変更時の問題
□投稿者/ 魔界の仮面弁士 (344回)-(2013/09/13(Fri) 17:52:15)
No67985 (namara1991 さん) に返信
> ListBoxは行単位の高さしか設定できないので、

IntegralHeight プロパティで。
引用返信 編集キー/
■68031 / inTopicNo.9)  Re[8]: Windowsのディスプレイ文字サイズ変更時の問題
□投稿者/ namara1991 (5回)-(2013/09/17(Tue) 16:01:30)
No67987 (魔界の仮面弁士 さん) に返信
> ■No67985 (namara1991 さん) に返信
>>ListBoxは行単位の高さしか設定できないので、
>
> IntegralHeight プロパティで。

IntegralHeightというプロパティを初めて知りました。ありがとうございました。
自分の勉強不足を恥ずかしく思います。

さて、あれから色々と調べてみましたが、Form(またはユーザーコントロール)のAutoScaleModeをDpiとした場合で、
Windowsの文字サイズ(DPI)を既定サイズ(小)より大きいサイズに設定したPCでこれを実行する場合、
以下のコントロールの高さを注意すべきということが分かりました。

・MultiLineのTextBox
・RichTextBox
・ListBox
・CheckedListBox

ただし、上記コントロールと同じ大きさのPanelを用意し、この中に上記コントロールをドッキングさせる(Dock=Fill)
ことにより、PanelはDPI比率で拡大し、上記コントロールはPanel内に収まり、今回問題となった現象は発生しませんでしたので、
今後はこのように対応しようと思います。

とりあえず、これでうまくいったようなので、今回の質問は解決とさせて頂こうと思いますが、
もし何かアドバイスがございましたら、よろしくお願いします。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -