简单的问题,快来拣分!为什么不能在控件的方法中模式打开一个窗口?(有代码)(100分)

  • 主题发起人 主题发起人 笑他
  • 开始时间 开始时间

笑他

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Button1;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls;

type
TButton1 = class(TButton)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
procedure showform;
published
{ Published declarations }
end;

procedure Register;

implementation

uses Unit2;

procedure Register;
begin
RegisterComponents('txmFrame', [TButton1]);
end;

{ TButton1 }

procedure TButton1.showform;
begin

with form2.Create(nil) do
Form2.ShowModal;
form2.Free;
end;

end.

其中form2是任意一个窗体
 
调用这个方法:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button11: TButton1;
procedure Button11Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button11Click(Sender: TObject);
begin
Button11.showform;
end;

end.
 
出错信息就是那个常见的什么:accesss violation at address ......
 
with form2.Create(nil) do
with Tform2.Create(nil) do

 
with TForm2.Create(nil) do
try
ShowModal;
finally
Free;
end;
 
to :thx1180
我试过了,不行呀,一样的
 
with Tform2.Create(nil) do //Tform2 应该是个类吧
ShowModal; //Form2.ShowModal 错
 
procedure TForm1.Button11Click(Sender: TObject);
var
Form2:TForm2;
begin
try
form2:=TForm2.Create(nil) ;
Form2.ShowModal;
finally
form2.Free;
end;
end;
这样写应该正规些,你在上面的引用Form2是不对的,你引用的那个Form2根本就不是你创建的那个
 
按照thx1180的出什么问题呢?
 
procedure TButton1.showform;
begin

with form2.Create(nil) do
Form2.ShowModal;
form2.Free;
end
你这个form2从那来的,乱加一气。你是在创建组件,那它里面引用的属性,对象方法必须是实实在在存在的,你form2有么?DELPHI编译的时候,我想根本就通不过。
form2改成form可以一试。
好好回去看书。!!!
 
to: weichao9999
相当于 form2 := tForme.create(nil);
form2.showModal
也是一样的出错
 
form2:=TForm2.Create(nil) ; //这是我写的
我写得没错,如果出错的话,肯定和你程序不符产生的。
出什么错?
 
form2:=TForm2.Create(self) //试一下
你的Tform2是不是已经存在了?单元引用了吗?
 
procedure TmainForm.bsSkinButtonsBar1Sections0Items3Click(Sender: TObject);
var
GoodsDealForm: TGoodsDealForm;
begin
GoodsDealForm:=nil;
try
GoodsDealForm:=TGoodsDealForm.Create(self);
GoodsDealForm.ShowModal ;
finally
GoodsDealForm.Free;
end;
end;

procedure TmainForm.bsSkinButtonsBar5Sections0Items2Click(Sender: TObject);
var
F_statistics: TF_statistics;
begin
F_statistics := nil;
try
F_statistics := TF_statistics.Create(self);
F_statistics.ShowModal;
finally
F_statistics.Free;
end;
end;
我的程序都这么写
 
各位稍等等,我稍后加分
 
各位,你们有5个人回答问题了,都批评的很对,我真想一人加50分,可惜分太少,见谅了
特别感谢weichao9999的热情
 

Similar threads

后退
顶部