procedure TForm1.Button2Click(Sender: TObject); begin if not Assigned(Application.FindComponent('form2')) then Open_Tab_Form(TForm2,Form2,sender); end;
procedure TForm1.Button3Click(Sender: TObject); begin form2:=Tform2.Create(self); end;
运行后,当先点击button2时,只能创建一个tabsheet,不管后来怎么点button2或者button3都只有一个。 若先点击button3,再多次点击button2,可以创建多个tabsheet。 请好心人帮忙! [解决办法] procedure TForm1.Button2Click(Sender: TObject); begin //if not Assigned(Application.FindComponent('form2')) then去掉这句 Open_Tab_Form(TForm2,Form2,sender); end;
type TForm1 = class(TForm) PageControl1: TPageControl; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); procedure Open_Tab_Form(ClassType:TComponentClass;OpenFrom:TForm;sender:Tobject); var Thetabsheet:ttabsheet; ThePanel:TPanel; begin TheTabSheet := TTabSheet.Create(Self); TheTabSheet.PageControl := PageControl1; ThePanel:=Tpanel.Create(self); ThePanel.Parent:= TheTabSheet;
ThePanel.Align:=alClient; application.CreateForm(ClassType,OpenFrom); OpenFrom.Dock(ThePanel,BoundsRect); OpenFrom.show; TheTabSheet.Caption:=Tbutton(sender).Caption; TheTabSheet.Show; end; begin //if not Assigned(Form2) then if not Assigned(Application.FindComponent('form2')) then Open_Tab_Form(TForm2, Form2, Sender); end;
end. [解决办法] 楼上,one tabsheet我已实现了。我有两个疑问:
1.form2已经创建了,可if not Assigned(Form2) 判断却显示没有创建,为何? 2.button3的测试中,为何先点击button3创建form2后,button2创建一个tabsheet的功能却失效了,可以创建很多个?
功能虽然可以实现,但是在测试中发现的以上两个问题我不明白,我主要想搞懂这个。 [解决办法] var OpenFrom: TForm2; [解决办法] procedure TForm1.Button7Click(Sender: TObject); procedure Open_Tab_Form(ClassType:TComponentClass;var OpenFrom: TForm2;sender:Tobject); var Thetabsheet:ttabsheet; ThePanel:Tpanel; begin TheTabSheet := TTabSheet.Create(Self); TheTabSheet.PageControl := PageControl1; ThePanel:=Tpanel.Create(self); ThePanel.Parent:= TheTabSheet;
ThePanel.Align:=alClient; application.CreateForm(ClassType,OpenFrom); OpenFrom.Dock(ThePanel,BoundsRect); OpenFrom.show; TheTabSheet.Caption:=Tbutton(sender).Caption; TheTabSheet.Show; Memo1.Lines.Add('2 : ' + IntToHex(Integer(OpenFrom), 8)); end; begin Memo1.Lines.Add('1 : ' + IntToHex(Integer(Form2), 8)); //if not Assigned(Form2) then if not Assigned(Application.FindComponent('form2')) then Open_Tab_Form(TForm2, Form2, Sender);