我在form1上调用form2,且form2.parent := form1 但是form2显示时是灰现,且不能操作。

时间:2021-11-28 20:15:25
我在form1上调用form2,且form2.parent := form1 但是form2显示时是灰现,且不能操作。能告诉我怎么改么????

17 个解决方案

#1


你的代碼有問題, 貼出來

#2


不是很清楚

#3


这是form1中的代码

if not Assigned(form2) then
    form2:= Tform2.Create(Application);
  form2.parent := Frm_LRYG;
  form2.Show;

#4


form2.parent := form1 干掉,要这句话干什么

#5


如果是控件button那么 需要button.parent := form1
如果如你那样是调用窗体,那么不要form2.parent := form1

#6


if not Assigned(form2) then
    form2:= Tform2.Create(Application);
  form2.parent := Frm_LRYG;
  form2.Showmodal;  //只要注意这里就行了

#7


form1是放在panel上的,我想让form2显示在form1上,点击form1时form2不消失。

#8


不明白你为什么那样做

#9


那为什么不用主次窗体呢?这样不是很好吗?

#10


to cll007(gazo)

因为form2是form1的附属,form1用来添加基本信息,form2用来添加一些附属信息。
帮帮我好么,我知道你很厉害的。拜托了。

#11


to 22932565(天地之鹰)
我在MDI中无法让子窗体和panel上的窗体同时显示。

#12


对啊,是不能显示的啊,我只是意见一下,你那样做到底有什么意思啊,
你说说看,你那样做到最后会是什么样的效果。我帮你想想看会不会有其它的办法。

#13


你看看这样做行吗?
我是这样想的:
建立一个工程,在里面添加form1,form2。从project-options 在forms选项卡中,把form2移动到available forms 中,在使用一下代码:
if not assigned(form2) then
begin
     form2:= Tform2.Create(Application);
      form2.parent := panel1;
     form2.Show;
end;
这样可以了

#14


比如form1上显示的是基本信息的内容,form2是对基本信息的添加,当form2出现时form1不消失,而操作完form2后,不用重新调form1它的内容就自动显示了。

#15


那你也没必要这么写form2.parent := form1吧!
比如在form1中有个添加的按钮,你在这个按钮的
事件里写:
if form2.ShowModal = mrOK then
begin
...
end;
就可以达到你的目的了嘛!


#16


非常感谢!!!

#17


你要的效果是否是
如同记事本的 查找 窗口一样,结果可以 在背后窗体显示,而当前窗体不背遮住
如果是,那么下面的
Form1的FormStyle是fsMDIForm  主窗体
Form2的FormStyle是fsMDIChild  基本信息的内容窗体
Form3的FormStyle是fsStayOnTop 对基本信息的添加的窗体
必须保证Form1,Form2,Form3是全局变量,才能使if not assigned(Form)有效
---------
改变Form3上的Edit1的内容时,Form2上Edit1的内容同时改变
----------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    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);
begin
  if not Assigned(Form2) then
  Form2:=TForm2.Create(Application);
  Form2.Show;
end;

end.
-------------
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation
uses unit3;
{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  if not Assigned(Form3) then
  Form3:=TForm3.Create(Self);
  Form3.Show;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  Form2:=nil
end;

end.
-----------------
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Edit1: TEdit;
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation
uses unit2;
{$R *.dfm}

procedure TForm3.Edit1Change(Sender: TObject);
begin
  Form2.Edit1.Text:=(Sender as TEdit).Text;
end;

end.

#1


你的代碼有問題, 貼出來

#2


不是很清楚

#3


这是form1中的代码

if not Assigned(form2) then
    form2:= Tform2.Create(Application);
  form2.parent := Frm_LRYG;
  form2.Show;

#4


form2.parent := form1 干掉,要这句话干什么

#5


如果是控件button那么 需要button.parent := form1
如果如你那样是调用窗体,那么不要form2.parent := form1

#6


if not Assigned(form2) then
    form2:= Tform2.Create(Application);
  form2.parent := Frm_LRYG;
  form2.Showmodal;  //只要注意这里就行了

#7


form1是放在panel上的,我想让form2显示在form1上,点击form1时form2不消失。

#8


不明白你为什么那样做

#9


那为什么不用主次窗体呢?这样不是很好吗?

#10


to cll007(gazo)

因为form2是form1的附属,form1用来添加基本信息,form2用来添加一些附属信息。
帮帮我好么,我知道你很厉害的。拜托了。

#11


to 22932565(天地之鹰)
我在MDI中无法让子窗体和panel上的窗体同时显示。

#12


对啊,是不能显示的啊,我只是意见一下,你那样做到底有什么意思啊,
你说说看,你那样做到最后会是什么样的效果。我帮你想想看会不会有其它的办法。

#13


你看看这样做行吗?
我是这样想的:
建立一个工程,在里面添加form1,form2。从project-options 在forms选项卡中,把form2移动到available forms 中,在使用一下代码:
if not assigned(form2) then
begin
     form2:= Tform2.Create(Application);
      form2.parent := panel1;
     form2.Show;
end;
这样可以了

#14


比如form1上显示的是基本信息的内容,form2是对基本信息的添加,当form2出现时form1不消失,而操作完form2后,不用重新调form1它的内容就自动显示了。

#15


那你也没必要这么写form2.parent := form1吧!
比如在form1中有个添加的按钮,你在这个按钮的
事件里写:
if form2.ShowModal = mrOK then
begin
...
end;
就可以达到你的目的了嘛!


#16


非常感谢!!!

#17


你要的效果是否是
如同记事本的 查找 窗口一样,结果可以 在背后窗体显示,而当前窗体不背遮住
如果是,那么下面的
Form1的FormStyle是fsMDIForm  主窗体
Form2的FormStyle是fsMDIChild  基本信息的内容窗体
Form3的FormStyle是fsStayOnTop 对基本信息的添加的窗体
必须保证Form1,Form2,Form3是全局变量,才能使if not assigned(Form)有效
---------
改变Form3上的Edit1的内容时,Form2上Edit1的内容同时改变
----------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    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);
begin
  if not Assigned(Form2) then
  Form2:=TForm2.Create(Application);
  Form2.Show;
end;

end.
-------------
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation
uses unit3;
{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  if not Assigned(Form3) then
  Form3:=TForm3.Create(Self);
  Form3.Show;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  Form2:=nil
end;

end.
-----------------
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Edit1: TEdit;
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation
uses unit2;
{$R *.dfm}

procedure TForm3.Edit1Change(Sender: TObject);
begin
  Form2.Edit1.Text:=(Sender as TEdit).Text;
end;

end.