none
タブページへユーザーコントロール(パネル)を貼り付け後、他のタブページのコントロールのサイズ、位置が崩れる RRS feed

  • 質問

  • 開発環境:Visual Basic 2008、Windows 10 Pro(64bit)
         ※ Visual Basic 2015でも発生

    フォームにタブコントロールひとつ配置し、そこへ複数のタブページを配置、
    各タブページ内へはテキストボックス、コンボボックス、データグリッドビューなどの複数コントロールを配置済みです。

    ユーザーコントロールを新たに作成してパネルを配置し、このパネル上へ複数コントロールを配置しています。
    ユーザーコントロールのサイズはタブページのサイズを設定しています。

    前述のフォームのタブページのひとつへ後述のユーザーコントロールを貼り付けた後、
    Visual Studioを再起動後、前述のフォームの他のタブページ内に配置済みのコントロールの位置やサイズが不規則に変わることがあり、
    実行中でもデザインモードでも発生します。

    ネットで検索し、コントロールやユーザーコントロールのプロパティが影響している可能性があるとの情報を得ましたが、
    ひとまずユーザーコントロールのサイズを、貼り付け先のタブページ内に余裕を持たせるよう設定することで回避できています。
    (例:タブページのサイズが800,600の場合、ユーザーコントロールのサイズを780,580と設定)

    ただ、根本の解決ではないことと、なぜこのような現象が起きるのかがとても気になるため質問させて頂きました。


    Visual Basic 2008で発生したため、Visual Studioのバージョンを上げたら解消されるかもと 2015で試行しましたが、
    同様の現象が発生しました。

    もし同様の現象が発生して根本的に解決された方がおられましたら、解決方法をご教示下さいますようどうぞよろしくお願い致します。
    2017年5月10日 8:55

回答

  • matsuda11 さま 拝見しました。

    はい。 そうだと思います。

    Form サイズを 300, 300 とし、
    TabControl の中に MultiLine の TextBox を、共に Dock Fill (Margin Default 3, 3, 3, 3)で入れます。
    各コントロールのサイズは、
    TabControl  284, 261、 (Item Size Default 62, 18)
    TabPage  276, 235、
    TextBox  270, 229。
    仮に、Location に 0, 3 を入れても IDE (VB2008SP1EE) は 3, 3 に戻しますね。

    • 編集済み ShiroYuki_Mot 2017年5月11日 1:21 Item Size Default 追記
    • 回答としてマーク matsuda11 2017年5月11日 3:57
    2017年5月11日 1:13

すべての返信

  • matsuda11 さま よろしく。

    TabPge のメンバを覗いて見たのですが、 Size と ClientSize とふたつのプロパティが用意されているので、
    Page 範囲全部は使えないという事だと思うのですが。

    https://msdn.microsoft.com/ja-jp/library/system.windows.forms.tabpage_members(v=vs.90).aspx

    2017年5月10日 9:46
  • ShiroYuki_Motさん、ご指摘どうもありがとうございます。

    ユーザーコントロールのLocationを 0, 0、Sizeをタブページの Sizeに合わせていましたが、
    この設定はするべきではないとのことですね。

    ユーザーコントロールのLocation、Sizeは、タブページのSize、Marginを考慮して設定するべきでしょうか?
    (例:タブページのSizeが 800, 600、Marginが全て 3の場合、
       ユーザーコントロールのLocationを最小でも 3, 3、Sizeを最大でも 794, 594を設定)
    2017年5月11日 0:21
  • matsuda11 さま 拝見しました。

    はい。 そうだと思います。

    Form サイズを 300, 300 とし、
    TabControl の中に MultiLine の TextBox を、共に Dock Fill (Margin Default 3, 3, 3, 3)で入れます。
    各コントロールのサイズは、
    TabControl  284, 261、 (Item Size Default 62, 18)
    TabPage  276, 235、
    TextBox  270, 229。
    仮に、Location に 0, 3 を入れても IDE (VB2008SP1EE) は 3, 3 に戻しますね。

    • 編集済み ShiroYuki_Mot 2017年5月11日 1:21 Item Size Default 追記
    • 回答としてマーク matsuda11 2017年5月11日 3:57
    2017年5月11日 1:13
  • matsuda11 さま 追記します。

    上の例は、Dock Fill なので、Form Resize に追従します。

    ですから、 TabControl を Dock Fill にしておいて、Debug で画面表示させてから、孫の TextBox (ご質問では各コントロール) が正常に表示される Form サイズを探る(数値変更する)のも手かも知れません

    • 編集済み ShiroYuki_Mot 2017年5月11日 1:39 てにをは訂正
    2017年5月11日 1:38
  • ShiroYuki_Motさん、ご教示頂きどうもありがとうございました。
    フォームデザイン時に、コントロールのLocation、Sizeがずれることの無いように注意してデザインします。

    ただ、質問にもありましたように、あるタブページへ貼り付けたユーザーコントロールのLocation、Sizeの設定が良くない場合に、
    他のタブページ上に配置したコントロールのSizeが小さくなったりLocationがずれてしまうことが気になるのですが、
    IDEがユーザーコントロールのLocation、Sizeを自動で変更する際に、同時に他タブ上のコントロールのLocation、Sizeを変更してしまうようですね。

    デザイン時に注意していたら回避できますので、気を付けます。

    どうもありがとうございました。
    2017年5月11日 3:57