【C#】パネルにユーザーコントロールを追加でレイアウトが崩れる

スポンサーリンク

最近作っているアプリで、メインフォームにパネル(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のままなんですね。。。

パネルにこだわる必要が無ければ、テーブルレイアウトパネルにした方がよさそうですね。

パネルは親フォームのフォント設定に引っ張られるが、テーブルレイアウトパネルだとコントロール内でうまく調整してくれるんですね。

メモメモ。。。。

コメント

タイトルとURLをコピーしました