最近作っているアプリで、メインフォームにパネル(panel)を設置し、パネルの中にユーザーコントロール(UserControl)を追加した時のお話。
あれ??大きさが変わる??レイアウトが勝手に変わる??自動レイアウト??
現象を説明
フォームの中にパネルを設置する。
ユーザーコントロールを作成する。
今回はユーザーコントロールにデータグリッドビューを設置し、親コンテナーにドッキングさせる。
フォームロード時にパネルにゆーさーコントロールを追加(設置)する。
private void frmMain_Load(object sender, EventArgs e)
{
//ユーザーコントロールのインスタンス生成
usrctrl_Sample _usrctrl = new usrctrl_Sample();
//パネルの中にユーザーコントロールを設置
pnlSample.Controls.Add(_usrctrl);
}
結果どうなるかというと。。。
データグリッドビューがあきらかに大きくなって設置されています。
パネルにスクロールを設置してみると、パネルにスクロールが表示されるようになったので、ユーザーコントロールが大きくなったことになります。
念のため、パネルの大きさと、ユーザーコントロールの大きさを表示させてみた結果は、、、
■パネル:200x200 ■ユーザーコントロール:225x200
いやいや、ユーザーコントロールのサイズは150×150で作っとるやん!?
ネットで見ても、原因が分からず。。。
だが、神は自分を見捨ててはいなかった!!
原因
実は、アプリを作成中に実はあるプロパティを1ヶ所変更していました。
まさか、これが影響するとは。。。
原因はフォームのフォントです。
デフォルトは9ptなのですが、これをフォームでは12ptに変更していました。
フォームのフォントを設定しておくと、追加するコントロール(ボタンとかラベルとか)のフォントが12ptになってくれる為、最近設定するようにしていました。※文字を大きくして見やすくしたかった。。。
しかし、ユーザーコントロールの方のフォントはデフォルトなので、9ptです。
フォームのフォントを変更する事で、レイアウトが崩れる可能性がある事が分かりました。
最後にユーザーコントロールのフォントをフォームと合わせて、もう一度実行してみました。
無事に成功です!!なおってよかった~。
まとめ
フォームのフォントサイズとユーザーコントロールのフォントサイズは一緒にする必要があります。
ユーザーコントロールのフォントサイズは設置されるフォームのフォントサイズ分、拡大縮小されるようになる為、レイアウトが勝手に変わる場合は、一度確認してみましょう。
メモメモ。。。
追記
知り合いから、テーブルレイアウトパネルを使ったら、いいよ!!って意見を貰ったのでしてみました。
パネルから、テーブルレイアウトパネルに変更!!
コードも、テーブルレイアウトパネルにユーザーコントロールを追加してみました。
うぉ!!ほんまや!!ただ文字フォントは9ptのままなんですね。。。
パネルにこだわる必要が無ければ、テーブルレイアウトパネルにした方がよさそうですね。
パネルは親フォームのフォント設定に引っ張られるが、テーブルレイアウトパネルだとコントロール内でうまく調整してくれるんですね。
メモメモ。。。。
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント