開発環境: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;
}
};
----------------------------------------------------------------------
解決しました.
this->Split->SuspendLayout();
this->SuspendLayout();
を抜いたら動作しました.
ツイート | ![]() |