我要動態添加Tabsheet
到PageControl
當客戶端連接到我的IdCmdTCPServer
與此相同的代碼:如何安全地將Tabsheet添加到TIdCmdTCPServer OnConnect事件中的PageControl中?
procedure TForm1.IdCmdTCPServer1Connect(AContext: TIdContext);
var
ATabSheet: TTabSheet;
begin
ATabSheet := TTabSheet.Create(PageControl1);
ATabSheet.PageControl := PageControl1;
ATabSheet.Caption := 'Hello!';
{...}
end;
其行,但關閉應用程序時,我會得到EOSError與消息:「系統錯誤代碼:1400.無效的窗口句柄「。 我已將此代碼塊添加到TButton
的OnClick
事件中,並且應用程序將無任何問題關閉。 有沒有更安全的方法來做到這一點?
後David Heffernan的幫助下,我已經改變了Methode這樣:
....
type
TMyThrd = class(TThread)
protected
procedure Execute; override;
end;
...
procedure TMyThrd.Execute;
begin
with TTabsheet.Create(Form1.PageControl1) do
PageControl := Form1.PageControl1;
end;
...
procedure TForm1.cmdAddTabCommand(ASender: TIdCommand);
begin
with TMyThrd.Create(True) do
begin
FreeOnTerminate := True;
Resume;
end;
end;
和命令測試結果:
但提到的問題是鋼發生在應用程序關閉!
也許這將幫助http://stackoverflow.com/q/9139940/1699210 – bummi
@bummi:感謝您的建議。但是我檢查了我的TCP代碼部分,並且在OnConnect事件中沒有這個代碼塊的情況下它們運行的很好。就在我添加這個塊時,問題就會出現! –