0
런타임에 이미 기존 TTabSheet
에 컨트롤을 추가하려고하면 이벤트 인 OnShow
내에 추가 될 때 컨트롤이 보이지 않습니다.TabSheet1Show 내 TPageControl에 컨트롤 추가
단계 재현 :
- 디자이너에
TPageControl
TForm
A를 추가 - 디자이너이
TPageControl
3 개TTabSheet
객체를 추가합니다. - 처음으로
TTabSheet
을 활성화합니다 (디자인 타임에).
헤더 파일 :
#ifndef Unit1H
#define Unit1H
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // Von der IDE verwaltete Komponenten
TPageControl *PageControl1;
TTabSheet *TabSheet1;
TTabSheet *TabSheet2;
TTabSheet *TabSheet3;
TButton *Button1;
void __fastcall TabSheet1Show(TObject *Sender);
private: // Benutzer-Deklarationen
TButton *ButtonConstructor;
TButton *ButtonOnTabShow;
public: // Benutzer-Deklarationen
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
소스 파일 :
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
// Adding a TButton in the Form's constructor works
TTabSheet *ts = this->TabSheet1;
if (!this->ButtonConstructor)
{
ButtonConstructor = new TButton(ts);
ButtonConstructor->Name = "ButtonConstructor";
ButtonConstructor->Caption = "Construct";
ButtonConstructor->Parent = ts;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TabSheet1Show(TObject *Sender)
{
// Adding a TButton in the OnShow Event of TTabSheet does NOT work:
// The button stays invisible
TTabSheet *ts = dynamic_cast< TTabSheet * >(Sender);
// TTabSheet *ts = this->ButtonOnTabShow; // does not make any difference
if (!this->ButtonOnTabShow)
{
ButtonOnTabShow = new TButton(ts);
ButtonOnTabShow->Name = "ButtonOnTabShow";
ButtonOnTabShow->Caption = "Show";
ButtonOnTabShow->Parent = ts;
// Button should be placed below the other
ButtonOnTabShow->Top = ButtonConstructor->Top + ButtonConstructor->Height + 2;
}
// The following 2 lines would make the Button visible
// PageControl1->ActivePageIndex = 1;
// PageControl1->ActivePageIndex = 0;
}
결과가 :
0ButtonConstructor
는TabSheet2
을 클릭 한 후TabSheet1
에,ButtonOnTabShow
도 볼 수 돌아 가면ButtonOnTabShow
는
볼 수 없습니다 볼 수 있습니다.
이 버그는 해결할 수없는 버그입니까, 아니면 누락 되었습니까?