|
볼랜드 뉴스그룹을 통해 검색한 정보에 의하면 컴포넌트의 CreateWnd()나 SetParent()를
override하라는 답변이 있었고, 그대로 했더니 깔끔하게 해결이 되더군요...
뉴스그룹 많이 이용합시다...^^(영어도 공부해 가면서...~_~)
void __fastcall TTest::SetParent(TWinControl *AParent)
{
TPanel::SetParent(AParent);
if(AParent && AComboBox)
AComboBox->Items->Text ="aaa\r\nbbb\r\nccc";
}
초보 님이 쓰신 글 :
: TPanel을 상속받은 Component에 ComboBox를 동적으로 배치하는 과정에서 발생하는 문제입니다.
:
: 컴포넌트 생성자에서 동적으로 생성시킬 Owner와 Parent를 모두 해당 컴포넌트로 설정해 준 다음
:
: ComboBox의 Item 속성을 건드리거나 AddItem등 method를 사용할 경우,
:
: 다른 폼을 사용하여 해당 컴포넌트를 생성시
:
: EInvalidOperation Exception(Control '' has no parent window)이 발생합니다...
:
: 디버그 모드에서 Trace를 해 보아도 꼭 Item관련 속성이나 method를 건드리거나 BoundsRect()를 쓰면
:
: 해당 오류가 발생하며, SetBounds 등 ComboBox의 Layout을 잡는 명령행은 무사히 실행됩니다....ㅠㅠ
:
: 컴포넌트 내 생성 부분은 아래와 같습니다.
: //.h
: class TTest : public TPanel {
: ...
:
: protected :
: TComboBox *AComboBox;
: ...
: }
:
: //.cpp
: void __fastcall TTest::TTest(TComponent* Owner) : TPanel(Owner)
: {
: AComboBox = new TComboBox(this);
: AComboBox->Parent = this;
:
: AComboBox->SetBounds(10, 10, 100, 20);
:
: AComboBox->Items->Text = "aaa\r\nbbb\r\nccc"; //=====>이부분에서 위 에러가 납니다...
: //Items->Add()를 쓰거나 BoundsRect를
: //설정할 때도 마찬가지입니다...ㅠㅠ
: }
:
:
: 그런데 ComboBox를 컴포넌트 내부가 아닌 폼에서 직접 동적으로 생성하고 테스트해 보았더니
:
: 위와 같은 문제가 생기질 않고 잘 돌아갔습니다...-_-
:
: 이 문제를 어떻게 해결해야 할지 고수님들의 가르침 부탁드립니다...
:
:
:
:
|