动态创建 Button,不响应OnClick事件,为什么?
编译完全通过,运行也正常显示按钮,就是点击动态生成的按钮,没有任何反应,求教,代码如下:
- C/C++ code
void __fastcall TForm1::Button5Click(TObject *Sender){ TSearchRec sr; int iAttributes = 0; AnsiString basePath = "D:\\ShareGTS"; iAttributes |= faAnyFile; StringGrid1->RowCount = 2; int serverCount = 0; StringGrid1->ColWidths[0]=80; StringGrid1->ColWidths[1]=240; StringGrid1->ColWidths[2]=80; StringGrid1->ColWidths[3]=80; StringGrid1->ColWidths[4]=120; TRect Rect = StringGrid1-> CellRect(0,0); if (FindFirst(basePath + "\\build\\lib\\*.jar", iAttributes, sr) == 0) { do { if ((sr.Attr & iAttributes) == sr.Attr && sr.Name != "gtsdb.jar" && sr.Name != "gtsutils.jar" && sr.Name != "tools.jar") { serverCount += 1; if(serverCount>1) StringGrid1->RowCount += 1; StringGrid1->Cells[0][serverCount] = ChangeFileExt(sr.Name,""); StringGrid1->Cells[1][serverCount] = basePath + "\\build\\lib\\" + sr.Name; StringGrid1->Cells[2][serverCount] = IntToStr(sr.Size); StringGrid1->Cells[3][serverCount] = IntToStr(sr.Time); Rect = StringGrid1-> CellRect(4,serverCount); TButton *myBtn = new TButton(StringGrid1); myBtn->Name = String("myBtn")+(serverCount); myBtn->Parent = StringGrid1; //myBtn->Name = StringGrid1->Cells[0][serverCount]; myBtn->Caption = "启动"; myBtn->Left=Rect.right-80; myBtn->Top=Rect.Top; myBtn->Height=25; myBtn->Width=75; myBtn->OnClick=operServerClick; } } while (FindNext(sr) == 0); FindClose(sr); }}//---------------------------------------void __fastcall TForm1::operServerClick(TObject *Sender){ ShowMessage("啊啊啊啊啊啊啊啊啊");}//---------------------------------------
[解决办法]
前几天的帖子,不知道是不是你
TButton *myBtn = new TButton(this);
myBtn->Parent = this;
myBtn->Left=StringGrid1.Left+StringGrid1.Width+Rect.right-80;
试试
[解决办法]
搞清TControl.Owner和Parent的关系。