请帮忙--毕业设计中遇到的问题(1)(50分)

  • 主题发起人 主题发起人 无影
  • 开始时间 开始时间

无影

Unregistered / Unconfirmed
GUEST, unregistred user!
主窗体FORM1.CREATE事件中:
FORM2.SHOWMODAL;
然后在FORM2中加一个OPENDIALOG控件,当执行OPENDIALOG1时出现以下:
Access violation at address 00435C03 in module 'project1.exe'
错误提示.
请问有什么问题???
 
把代码贴出来。

如果前面没有引用未创建对象的话,
有一个可能性就是你的一个过程中代码行数太多,这时候
凡是很多生成窗体的函数(包括MessageBox)都会出现访问
错误。
 
一般是因为:
1。对象为被创建就被引用。
2。忘了释放动态创建的对象
 
添加opendialog控件应该会自动创建该类,不是吗?
 
原因很简单,在ONCREATE事件不能调用其他FORM的SHOW或SHOWMODAL方法,
一调用就出错。把你程序希望的意图讲出来,看看有没有其他办法可以解决。
 
cch_b说的对,
把OPENDIALOG放在Form的OnShow事件中执行吧(我猜你想要的效果
是一出现主程序窗口就打开一个对话框吧)
 
如果想在主窗体显示之前做些事情,怎么办??
谢谢cch_b.
 
cheka:
可我想在主窗体显示之前弹出一个新窗体中用到opendialog控件
 
呵呵,这个呀,好像要重载Loaded方法
 
试试
TForm1=Class(TForm)
.....
pulic
loaded;overried;
..
end;

procedure TForm1.Loaded;
begin
ShowMessage('hi');
inherited;
end;

我没试,开一个D5太慢:-P
 
很简单,就在project1的工程文件里(Project---View Code)作处理。
 
主窗体在Project里创建完后是自动就Show出来的,
把OpenDialog放在TApplication.CreateForm(TForm1,Form1)后
恐怕不行。
偶也在纸上谈兵,应该试一试。
 
实践出真知:

怪兽的方法我试过了,西西,很对。
program Project1;

uses
Forms,Dialogs,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}
var Od:TOpenDialog;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Od:=TOpenDialog.Create(Application);
Od.Execute;
Od.Free;
Application.Run;
end.

不过偶的重载Loaded方法也行得通,好处是不用动态创建
OpenDialog组件,属性在设计状态下就可以设置。

Type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
private
{ Private declarations }
public
procedure Loaded;override;
{ Public declarations }
end;
....
implementation

procedure TForm1.Loaded;
begin
OpenDialog1.Execute;
inherited;
end;
 
同意cheka的看法
 
begin
Application.Initialize;
Form2:=TForm2.Create(Application); //做你想做的事吧;
While not Form2Pass do Application.Processmessage;
//Form2的Close事件中,Form2Pass:=true;(当然你喜欢别的变量名就用别的)
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
 
接受答案了.
 
后退
顶部