ボタンを押して,内部にスプリットコンテナ等の部品を持つタブページをタブコントロールに追加すると,DockやAnchorが正常に動作しない点について

解決


鈴木  2007-10-14 08:27:50  No: 66567

開発環境:Vista, VS2005.NET C++
テンプレート:Windowsフォーム

ボタンを押すとtabControlに,tabPageから継承したコントロールクラスを追加するプログラムを組んでいます.tabControlの追加には,
     clsAddTabPage^ TestTab;
     TestTab = gcnew clsAddTabPage();
     this->tabControl1->Controls->Add(TestTab);
のコードをボタンに設定し,実際にページの追加までは確認しました.

ですが,この時に追加されたページと,ページに配置された各コントロールのドッキングやアンカーがうまく機能してくれません.
追加されたtabPageは見た目の上ではドッキングしているようですが,ウォッチを使うとSizeプロパティがデフォルトらしい(200,100)のまま動いてくれません.
tabPageに追加したSplitContainerも,同様にSizeが(150,100)のまま動きません(Panelでも試しましたが,同様の問題が発生します).

また,SplitContainerはサイズを変更した(例えば,(400,400)にした)際,内部に保持するPanel1,Panel2のサイズがデフォルト状態(Size(150,100)の時と同じ状態)で表示されてしまい,分割バーを動かした後で初めて変更したサイズにPanel1,Panel2のサイズが変更されます.

この問題はすれば解決するでしょうか?
何方か,お知恵をお貸しください.
宜しくお願いします.

以下に,tabPageから継承して作成したクラスの全文を記載します.
----------------------------------------------------------------------
public ref class clsAddTabPage : public System::Windows::Forms::TabPage
{
  #pragma region タブ追加コード
  //clsAddTabPage^ TestTab;
  //TestTab = gcnew clsAddTabPage();
  //this->tabControl1->Controls->Add(TestTab);
  #pragma endregion

public:
  System::Windows::Forms::SplitContainer^  Split;

  clsAddTabPage()
  {
    this->InitializeComponent();
  }

  ~clsAddTabPage()
  {
  }

  void InitializeComponent(void)
  {
    this->Split = (gcnew System::Windows::Forms::SplitContainer());
    this->Split->SuspendLayout();
    this->SuspendLayout();
    //
    // tabPageのプロパティ Size=(200,100)
    //
    this->BackColor = System::Drawing::SystemColors::Window;
    this->BorderStyle = System::Windows::Forms::BorderStyle::Fixed3D;
    this->Location = System::Drawing::Point(0, 0);
    this->Dock = System::Windows::Forms::DockStyle::Fill;
    this->Text = "新規ページ";
    this->Controls->Add(this->Split);
    //
    // Splitのプロパティ Size=(150,100)
    //
    this->Split->BackColor = System::Drawing::Color::Green;
    this->Split->Dock = System::Windows::Forms::DockStyle::Fill;
    this->Split->Location = System::Drawing::Point(0, 0);
    // Panel1
    this->Split->Panel1->BackColor = System::Drawing::Color::Red;
    // Panel2
    this->Split->Panel2->BackColor = System::Drawing::Color::Yellow;
  }
};
----------------------------------------------------------------------


鈴木  2007-10-17 02:23:26  No: 66568

解決しました.

this->Split->SuspendLayout();
this->SuspendLayout();

を抜いたら動作しました.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加