いつもありがとうございます。
今回は、フォームのスケーリングについてです。
http://note.chiebukuro.yahoo.co.jp/detail/n77169
現在は上記のサンプルを参考に、
スケーリングを行っているのですが、
これだとフォントサイズが変わらず違和感があり、困っています。
フォントサイズも同時に変更する方法はあるでしょうか?
また、コントロールのScalメソッドなどは、
解像度で大きさを変更するだけで、
たとえば、フォームを最大化したときに、
コントロールの大きさや位置を調節する類のものですか?
一応MSDNなどで調べてはいるのですが、
フォームのサイズなどに関しては無頓着なため、
わかりやすい情報などがあれば、教えていただけると助かります。
よろしくお願いします。
C#.netのフォームとコントロールの調整について
Re: C#.netのフォームとコントロールの調整について
フォームのサイズに合わせてコントロールの大きさを変えるだけならば、Anchorプロパティでいけると思いますが、残念ながらフォントサイズまで同時にリサイズはされません。
ですので、そういうコントロールクラスを自作するか、そういう処理を組み込むしかないかと思いますよ。
ですので、そういうコントロールクラスを自作するか、そういう処理を組み込むしかないかと思いますよ。
Re: C#.netのフォームとコントロールの調整について
失礼、リサイズではなくて、スケーリングでしたね。先ほどの書き込みは忘れてください・・・。
Re: C#.netのフォームとコントロールの調整について
Windowsソフトに於いて,ウィンドウサイズが変化した場合,通常はコントロールのサイズを変化させる等の処理を行い,表示可能領域を変化させます。
このための方法であれば,WinFormsであってもAnchorプロパティ (1.0-)や,TableLayoutPanel, FlowLayoutPanel (2.0-)などが用意されています。
これに対して,フォントのサイズを変化させることは通常の処理ではありません。
DPI-awareなソフトウェアの作成,という観点からフォントサイズを計算で出す場合もありますが,あくまでそれはディスプレイDPI値を使ったものになります。
ウィンドウサイズの変化に合わせてフォントも変化させるのであれば,コントロールを最初の方法を使って変化させた後,そのサイズに合わせてフォントを決定する,という方法になるかと思います。
目的次第では,パスを用意して,GraphicsのTransform系メソッドと組み合わせることで目的を達成できるかもしれません。
このための方法であれば,WinFormsであってもAnchorプロパティ (1.0-)や,TableLayoutPanel, FlowLayoutPanel (2.0-)などが用意されています。
これに対して,フォントのサイズを変化させることは通常の処理ではありません。
DPI-awareなソフトウェアの作成,という観点からフォントサイズを計算で出す場合もありますが,あくまでそれはディスプレイDPI値を使ったものになります。
ウィンドウサイズの変化に合わせてフォントも変化させるのであれば,コントロールを最初の方法を使って変化させた後,そのサイズに合わせてフォントを決定する,という方法になるかと思います。
目的次第では,パスを用意して,GraphicsのTransform系メソッドと組み合わせることで目的を達成できるかもしれません。
Re: C#.netのフォームとコントロールの調整について
いえ、ありがとうございます。バグ さんが書きました:失礼、リサイズではなくて、スケーリングでしたね。先ほどの書き込みは忘れてください・・・。
Anchorも試してはみましたが、どうもうまくいきません。
具体的にはYuoさんへの返信にて
Re: C#.netのフォームとコントロールの調整について
AncohrやPanelコントロールでは、YuO さんが書きました:Windowsソフトに於いて,ウィンドウサイズが変化した場合,通常はコントロールのサイズを変化させる等の処理を行い,表示可能領域を変化させます。
このための方法であれば,WinFormsであってもAnchorプロパティ (1.0-)や,TableLayoutPanel, FlowLayoutPanel (2.0-)などが用意されています。
これに対して,フォントのサイズを変化させることは通常の処理ではありません。
DPI-awareなソフトウェアの作成,という観点からフォントサイズを計算で出す場合もありますが,あくまでそれはディスプレイDPI値を使ったものになります。
ウィンドウサイズの変化に合わせてフォントも変化させるのであれば,コントロールを最初の方法を使って変化させた後,そのサイズに合わせてフォントを決定する,という方法になるかと思います。
目的次第では,パスを用意して,GraphicsのTransform系メソッドと組み合わせることで目的を達成できるかもしれません。
相対的な位置が変化しないので、隣同士のボタンなどは重なってしまいました。
そのため位置は計算で割り出す必要があるかもしれないので、
細かい部分を考えると最初の比率の計算のサンプルを流用しないと駄目かもしれません。
フォントサイズは、ウィンドウのサイズの変化後に合わせてフォントを決定する方法で、
やってみようと思います。
Re: C#.netのフォームとコントロールの調整について
TableLayoutPanelを使いましたか。海Sea さんが書きました:AncohrやPanelコントロールでは、
相対的な位置が変化しないので、隣同士のボタンなどは重なってしまいました。
そのため位置は計算で割り出す必要があるかもしれないので、
細かい部分を考えると最初の比率の計算のサンプルを流用しないと駄目かもしれません。
相対的な位置がちゃんと変化しますよ。
もちろん,ウィンドウサイズを小さくしすぎるとサイズとして無理が出てくるので重なる場合がありますが……。
ちなみに,添付はフォントサイズをコントロールサイズに合わせた場合の例です。
左側が通常の動作,右側がフォントサイズを変化させた動作です。
- 添付ファイル
-
- WindowsFormsApplication4.zip
- Visual Studio 2013 UPdate 3 Solution File with C# Project
- (15.46 KiB) ダウンロード数: 284 回
Re: C#.netのフォームとコントロールの調整について
サンプルありがとうございます。YuO さんが書きました: TableLayoutPanelを使いましたか。
相対的な位置がちゃんと変化しますよ。
もちろん,ウィンドウサイズを小さくしすぎるとサイズとして無理が出てくるので重なる場合がありますが……。
ちなみに,添付はフォントサイズをコントロールサイズに合わせた場合の例です。
左側が通常の動作,右側がフォントサイズを変化させた動作です。
DockをFillにしないとできませんよね。確認不足ですいません。
つまり、ラベルやボタンやテキストボックス、コンボボックスなどが
所狭しと並んでいる場合、
その数分だけTableLayoutPanelの列と行を用意する、
それぞれのコントロールのDockをFillにする、
という認識で間違ってないでしょうか。
あと、フォントサイズの変更はとても参考になりました。
Re: C#.netのフォームとコントロールの調整について
TableLayoutPanelとは,つまりはグリッドです。海Sea さんが書きました:つまり、ラベルやボタンやテキストボックス、コンボボックスなどが
所狭しと並んでいる場合、
その数分だけTableLayoutPanelの列と行を用意する、
それぞれのコントロールのDockをFillにする、
という認識で間違ってないでしょうか。
HTMLのテーブルと書いた方が分かり易いかもしれません。
各セルには一つのコントロールしか入ることができず,そのコントロールの位置は,DockプロパティとAnchorプロパティで決定します。
- Dockプロパティは,通常時と同じく,親のどこに張り付くかを指定します。
また,指定の辺と直交する辺は,全体に広がります。 - Anchorプロパティは,通常時と動作が異なります。設定されている辺を,セルの端に配置します。
- LeftやRightのみを指定した場合,左または右のみがセルの辺に張り付き,幅はWidthで指定された値になります。
- LeftとRightを両方指定した場合,左と右がセルの辺に張り付きます。つまり,セルの幅いっぱい(Margin分除く)に広がります。
- LeftもRightも指定しない場合,セルの左辺と右辺から等距離の場所にコントロールが配置されます。幅はWidthで指定された値になります。実質的に,水平方向のセンタリングができます。
というよりも,Anchorを駆使する方が多いと思います。
Dockの指定はすべてAnchorの指定で代替でできるため,Dockを使うことはFillであってもそれほどないでしょう。
オフトピック
一つのコントロールといえども,そこへPanel系やUserControlをおけるため,事実上複数のコントロールをおけます。
Re: C#.netのフォームとコントロールの調整について
詳しい説明をありがとうございます。
極端な話をすれば、50のコントロールがあれば、50のセルが必要だということ。
また、Panelを入れ子にして、グループ化しても、
それなりの調整が必要だということがわかりました。
プロパティで色々調節してみます。
極端な話をすれば、50のコントロールがあれば、50のセルが必要だということ。
また、Panelを入れ子にして、グループ化しても、
それなりの調整が必要だということがわかりました。
プロパティで色々調節してみます。
Re: C#.netのフォームとコントロールの調整について
すいませんが、とりあえず今回は計算でスケーリングを行うことになりました。
具体的には、thisをフォームのリサイズのイベントで計算用メソッドに投げて、
ループですべてのコントロールの大きさと位置を割り出します。
ソースは掲載できない状況ですので、申し訳ありません。
今後も同じことがあると思うので、
早い段階でtablepanelなどを使用するようにしたいところです 。
ただ一画面に対してコントロールの数が異様に多い場合もあるので、
その時その時で、対処の方法は悩みどころかもしれませんね。
具体的には、thisをフォームのリサイズのイベントで計算用メソッドに投げて、
ループですべてのコントロールの大きさと位置を割り出します。
ソースは掲載できない状況ですので、申し訳ありません。
今後も同じことがあると思うので、
早い段階でtablepanelなどを使用するようにしたいところです 。
ただ一画面に対してコントロールの数が異様に多い場合もあるので、
その時その時で、対処の方法は悩みどころかもしれませんね。