我刚注册还没分,请大家帮忙
有两个窗体。Form1中有个paagecontrol. 动态生成Form2并加到pagecontrol上。
当把Form1中的editfrom.text附给Form2中的Edit就出错Form2.edit1.text:=editfrom.text
出错提示:Access Violation at Address0045375E
1.请问如何生成Form2才能实现这个功附值能???????
2.下面几个语句有什么不同吗?在这个程序中运行效果是一样的
//增加 TTabsheet
 Sheet:=TTabsheet.Create(nil);
Sheet:=TTabsheet.Create(self);
Sheet:=TTabsheet.Create(pagecontrol1);
多谢了各位。我头都大了都想不出来
///////////////////////////
program Project1;uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};{$R *.res}begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
///// unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Editfrom: TEdit;
    Button1: TButton;
    BtAddFrm: TButton;
    ////动态生成Form2并加到pagecontrol中
    procedure BtAddFrmClick(Sender: TObject);
    
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.BtAddFrmClick(Sender: TObject);
var
Sheet:TTabSheet;
Form:Tform;
begin
//增加 TTabsheet
 Sheet:=TTabsheet.Create(nil);
   with sheet do
    begin
    PageControl :=pagecontrol1;
    Caption :='AddTabSheet';
    end;
 pagecontrol1.ActivePage :=sheet;
 ////动态生成Form2并加到pagecontrol中
 form:=Tform2.Create(application);
 with form do
  begin
     Parent :=pagecontrol1.ActivePage ;
     BorderStyle :=bsnone;
     Top :=0;
     left:=0;  end;
  form.Show ;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Edit1.Text :=editfrom.Text ;
end;end.
//////////////////
unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm2 = class(TForm)
    Edit1: TEdit;
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form2: TForm2;implementation{$R *.dfm}end.

解决方案 »

  1.   

    不需要动态产生TTabSheet的,
    使用自动拖动就可以把form2放到TPageControl上,如:
    Form2.ManualDock(Form1.PageControl1);记得把PageControl1.DockSite设置为true。
    PageControl1会自动产生TTabSheet的。
      

  2.   

    ////动态生成Form2并加到pagecontrol中
     form:=Tform2.Create(application);
    楼主这个动态生成的是form,而且form是局部变量的,这样form2你还没创建的,你用他的属性当然会出地址错误一类的了。
      

  3.   

    operfume(橘子香水) 
    我的Form2 在程序的Form1.PageControl1中要动态生成和销毁(反复,不是一次)。应该如何实现》?
    logne() 你说的有道理。但在程序中反复生成,该如何定义Form2?
    怎样才能实现
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    form2.Edit1.Text :=editfrom.Text ;
    end;end
      

  4.   

    operfume(橘子香水) 
    我的Form2 在程序的Form1.PageControl1中要动态生成和销毁(反复,不是一次)。应该如何实现》?
    logne() 你说的有道理。但在程序中反复生成,该如何定义Form2?
    怎样才能实现
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    form2.Edit1.Text :=editfrom.Text ;
    end;end
      

  5.   

    这几天都没人来回答啊。我只好用以下办法来实现了。时间紧啊
    在form1中定义窗体级变量form . ////动态生成Form2并加到pagecontrol中
     form:=Tform2.Create(application);
     with form do
    。以下有点变化:
     procedure TForm1.Button1Click(Sender: TObject);
    begin
    (form as Tform2).Edit1.Text :=editfrom.Text ;
    end;
    在我的程序中测试是可以通过的。不知道有没有更好的办法??