|
먼저 OnSelect 이벤트는 발생합니다.
확인하는 방법은?
cbBox->Items->Add("1");
cbBox->Items->Add("2");
cbBox->Items->Add("3");
위와같이 생성될때 입력한후에
Grid위에 ComboBox가 보이면 키보드로 1 또는 2..을 입력해 보세요
그러면 OnSelect 이벤트 핸들러가 호출됨을 확인할수 있습니다.
그런데 문제는?
ComboBox가 Grid를 Parent로 가지고 있을때
ComboBox의 DropDown버튼을 클릭해도 DropDown 윈도우가 아주 작게 나타나네요
거의 보이지 않게...
생각건데 원인은 Grid가 자체 Edit( InplaceEdit )를 제어하기 위해
자신위에 뜨는 DropDown윈도우에 대해 뭔가 Hook하는것 같네요... (추측임)
음...
해결방법은 Grid를 Parent로 가지지 않으면 됩니다.
void __fastcall CVclProperty::SetComboBox()
{
cbBox = new TComboBox(this);
cbBox->Visible = false;
cbBox->Parent = this->Parent;
cbBox->Left= this->Left+ 60;
cbBox->Top= this->Top + 300;
cbBox->OnSelect = onComboSelect;
cbBox->OnKeyPress= ComboBoxKeyPress;
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
CVclProperty * grid=new CVclProperty(this);
grid->Left=500;
grid->Top=100;
grid->Parent=this;
grid->Visible=true;
grid->SetComboBox();
grid->cbBox->Items->Add("1");
grid->cbBox->Items->Add("2");
grid->cbBox->Items->Add("3");
}
이렇게 해보세요
-추신-
제대로 하려면
TInplaceEditList 를 상속받아서
새로운 InplaceEdit를 만드는 방식으로 해야할것 같습니다.
컴포넌트 자료실에 있는 TImpStringGrid 소스르 보시면 참고가 될것 같습니다.
박지훈님이 만드신것인데 Delphi로 되어있습니다.
그럼...
최형준 님이 쓰신 글 :
: StringGrid를 상속받아서 클래스를 하나 만들었습니다.
: 그 클래스 안에 맴버 변수로 ComboBox를 하나 동적으로 생성해서 사용하고 있는데요
: (당연히 StringGrid를 상속받은 클래스도 동적으로 생성해서 사용하구요)
: 이 ComboBox에 이벤트가 발생이 안되는것 같습니다.
:
: class CVclProperty : public TStringGrid
: {
: public:
: __fastcall CVclProperty(_in TComponent* Owner);
:
: __published:
: void __fastcall onDrawCell(_in TObject *Sender, _in int ACol, _in int ARow,
: _in TRect &Rect, _in TGridDrawState State);
:
: TComboBox *cbBox;
: void __fastcall onComboSelect(TObject *Sender);
: };
:
: ---구현부---
: __fastcall CVclProperty::CVclProperty(_in TComponent* Owner) : TStringGrid(Owner)
: {
: OnDrawCell = (TDrawCellEvent)&onDrawCell; //이 함수는 잘 동작합니다.
:
: cbBox = new TComboBox(this);
: cbBox->Parent = this;
: cbBox->Visible = false;
: cbBox->OnSelect = onComboSelect; //이 함수는 동작 하지 않습니다.
: }
:
: void __fastcall CVclProperty::onDrawCell(_in TObject *Sender, _in int ACol, _in int ARow,
: _in TRect &Rect, _in TGridDrawState State)
: {
: //<--이곳으로 들어옵니다.
: }
:
: void __fastcall CVclProperty::onComboSelect(TObject *Sender)
: {
: MessageBox(NULL, "", "xxx", MB_OK); //이곳으로 들어오지 않습니다.
: }
:
:
:
: 고수님들의 도움이 필요합니다... 도와주세요~~~
|