C#.netのフォームとコントロールの調整について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

C#.netのフォームとコントロールの調整について

#1

投稿記事 by 海Sea » 9年前

いつもありがとうございます。

今回は、フォームのスケーリングについてです。

http://note.chiebukuro.yahoo.co.jp/detail/n77169

現在は上記のサンプルを参考に、
スケーリングを行っているのですが、
これだとフォントサイズが変わらず違和感があり、困っています。
フォントサイズも同時に変更する方法はあるでしょうか?

また、コントロールのScalメソッドなどは、
解像度で大きさを変更するだけで、
たとえば、フォームを最大化したときに、
コントロールの大きさや位置を調節する類のものですか?
一応MSDNなどで調べてはいるのですが、
フォームのサイズなどに関しては無頓着なため、
わかりやすい情報などがあれば、教えていただけると助かります。
よろしくお願いします。

アバター
バグ
記事: 130
登録日時: 13年前
住所: 愛媛県
連絡を取る:

Re: C#.netのフォームとコントロールの調整について

#2

投稿記事 by バグ » 9年前

フォームのサイズに合わせてコントロールの大きさを変えるだけならば、Anchorプロパティでいけると思いますが、残念ながらフォントサイズまで同時にリサイズはされません。

ですので、そういうコントロールクラスを自作するか、そういう処理を組み込むしかないかと思いますよ。

アバター
バグ
記事: 130
登録日時: 13年前
住所: 愛媛県
連絡を取る:

Re: C#.netのフォームとコントロールの調整について

#3

投稿記事 by バグ » 9年前

失礼、リサイズではなくて、スケーリングでしたね。先ほどの書き込みは忘れてください・・・。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: C#.netのフォームとコントロールの調整について

#4

投稿記事 by YuO » 9年前

Windowsソフトに於いて,ウィンドウサイズが変化した場合,通常はコントロールのサイズを変化させる等の処理を行い,表示可能領域を変化させます。
このための方法であれば,WinFormsであってもAnchorプロパティ (1.0-)や,TableLayoutPanel, FlowLayoutPanel (2.0-)などが用意されています。

これに対して,フォントのサイズを変化させることは通常の処理ではありません。
DPI-awareなソフトウェアの作成,という観点からフォントサイズを計算で出す場合もありますが,あくまでそれはディスプレイDPI値を使ったものになります。
ウィンドウサイズの変化に合わせてフォントも変化させるのであれば,コントロールを最初の方法を使って変化させた後,そのサイズに合わせてフォントを決定する,という方法になるかと思います。
目的次第では,パスを用意して,GraphicsのTransform系メソッドと組み合わせることで目的を達成できるかもしれません。

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: C#.netのフォームとコントロールの調整について

#5

投稿記事 by 海Sea » 9年前

バグ さんが書きました:失礼、リサイズではなくて、スケーリングでしたね。先ほどの書き込みは忘れてください・・・。
いえ、ありがとうございます。
Anchorも試してはみましたが、どうもうまくいきません。
具体的にはYuoさんへの返信にて

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: C#.netのフォームとコントロールの調整について

#6

投稿記事 by 海Sea » 9年前

YuO さんが書きました:Windowsソフトに於いて,ウィンドウサイズが変化した場合,通常はコントロールのサイズを変化させる等の処理を行い,表示可能領域を変化させます。
このための方法であれば,WinFormsであってもAnchorプロパティ (1.0-)や,TableLayoutPanel, FlowLayoutPanel (2.0-)などが用意されています。

これに対して,フォントのサイズを変化させることは通常の処理ではありません。
DPI-awareなソフトウェアの作成,という観点からフォントサイズを計算で出す場合もありますが,あくまでそれはディスプレイDPI値を使ったものになります。
ウィンドウサイズの変化に合わせてフォントも変化させるのであれば,コントロールを最初の方法を使って変化させた後,そのサイズに合わせてフォントを決定する,という方法になるかと思います。
目的次第では,パスを用意して,GraphicsのTransform系メソッドと組み合わせることで目的を達成できるかもしれません。
AncohrやPanelコントロールでは、
相対的な位置が変化しないので、隣同士のボタンなどは重なってしまいました。
そのため位置は計算で割り出す必要があるかもしれないので、
細かい部分を考えると最初の比率の計算のサンプルを流用しないと駄目かもしれません。

フォントサイズは、ウィンドウのサイズの変化後に合わせてフォントを決定する方法で、
やってみようと思います。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: C#.netのフォームとコントロールの調整について

#7

投稿記事 by YuO » 9年前

海Sea さんが書きました:AncohrやPanelコントロールでは、
相対的な位置が変化しないので、隣同士のボタンなどは重なってしまいました。
そのため位置は計算で割り出す必要があるかもしれないので、
細かい部分を考えると最初の比率の計算のサンプルを流用しないと駄目かもしれません。
TableLayoutPanelを使いましたか。
相対的な位置がちゃんと変化しますよ。
もちろん,ウィンドウサイズを小さくしすぎるとサイズとして無理が出てくるので重なる場合がありますが……。

ちなみに,添付はフォントサイズをコントロールサイズに合わせた場合の例です。
左側が通常の動作,右側がフォントサイズを変化させた動作です。
添付ファイル
WindowsFormsApplication4.zip
Visual Studio 2013 UPdate 3 Solution File with C# Project
(15.46 KiB) ダウンロード数: 284 回

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: C#.netのフォームとコントロールの調整について

#8

投稿記事 by 海Sea » 9年前

YuO さんが書きました: TableLayoutPanelを使いましたか。
相対的な位置がちゃんと変化しますよ。
もちろん,ウィンドウサイズを小さくしすぎるとサイズとして無理が出てくるので重なる場合がありますが……。

ちなみに,添付はフォントサイズをコントロールサイズに合わせた場合の例です。
左側が通常の動作,右側がフォントサイズを変化させた動作です。
サンプルありがとうございます。
DockをFillにしないとできませんよね。確認不足ですいません。
つまり、ラベルやボタンやテキストボックス、コンボボックスなどが
所狭しと並んでいる場合、
その数分だけTableLayoutPanelの列と行を用意する、
それぞれのコントロールのDockをFillにする、
という認識で間違ってないでしょうか。

あと、フォントサイズの変更はとても参考になりました。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: C#.netのフォームとコントロールの調整について

#9

投稿記事 by YuO » 9年前

海Sea さんが書きました:つまり、ラベルやボタンやテキストボックス、コンボボックスなどが
所狭しと並んでいる場合、
その数分だけTableLayoutPanelの列と行を用意する、
それぞれのコントロールのDockをFillにする、
という認識で間違ってないでしょうか。
TableLayoutPanelとは,つまりはグリッドです。
HTMLのテーブルと書いた方が分かり易いかもしれません。

各セルには一つのコントロールしか入ることができず,そのコントロールの位置は,DockプロパティとAnchorプロパティで決定します。
  • Dockプロパティは,通常時と同じく,親のどこに張り付くかを指定します。
    また,指定の辺と直交する辺は,全体に広がります。
  • Anchorプロパティは,通常時と動作が異なります。設定されている辺を,セルの端に配置します。
    • LeftやRightのみを指定した場合,左または右のみがセルの辺に張り付き,幅はWidthで指定された値になります。
    • LeftとRightを両方指定した場合,左と右がセルの辺に張り付きます。つまり,セルの幅いっぱい(Margin分除く)に広がります。
    • LeftもRightも指定しない場合,セルの左辺と右辺から等距離の場所にコントロールが配置されます。幅はWidthで指定された値になります。実質的に,水平方向のセンタリングができます。
    左右方向で説明しましたが,当然上下方向でも同じことができます。
使い方によって,必ずしもDock.Fillを指定する必要はありません。
というよりも,Anchorを駆使する方が多いと思います。
Dockの指定はすべてAnchorの指定で代替でできるため,Dockを使うことはFillであってもそれほどないでしょう。
オフトピック
一つのコントロールといえども,そこへPanel系やUserControlをおけるため,事実上複数のコントロールをおけます。

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: C#.netのフォームとコントロールの調整について

#10

投稿記事 by 海Sea » 9年前

詳しい説明をありがとうございます。
極端な話をすれば、50のコントロールがあれば、50のセルが必要だということ。
また、Panelを入れ子にして、グループ化しても、
それなりの調整が必要だということがわかりました。
プロパティで色々調節してみます。

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: C#.netのフォームとコントロールの調整について

#11

投稿記事 by 海Sea » 9年前

すいませんが、とりあえず今回は計算でスケーリングを行うことになりました。
具体的には、thisをフォームのリサイズのイベントで計算用メソッドに投げて、
ループですべてのコントロールの大きさと位置を割り出します。
ソースは掲載できない状況ですので、申し訳ありません。
今後も同じことがあると思うので、
早い段階でtablepanelなどを使用するようにしたいところです 。
ただ一画面に対してコントロールの数が異様に多い場合もあるので、
その時その時で、対処の方法は悩みどころかもしれませんね。

閉鎖

“C言語何でも質問掲示板” へ戻る