动态创建Frame没问题,如下所示: var
Ffrm_Manual:TFrm_Manual;
if Ffrm_Manual<>nil then
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;
if Ffrm_Manual=nil then
begin
Ffrm_Manual :=Tfrm_ManualCal.Create(Application);
Ffrm_Manual .Parent :=Self ;
Ffrm_Manual.Align:=alClient ;
with Ffrm_Manual do但是我在Frame本体里面的释放的时候,有时候会报错,有时候又不报错,如下面所示: procedure Tfrm_ManualCal.btn_CancelClick(Sender: TObject);
begin
if Ffrm_Manual<>nil then
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;
end;
Ffrm_Manual:TFrm_Manual;
if Ffrm_Manual<>nil then
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;
if Ffrm_Manual=nil then
begin
Ffrm_Manual :=Tfrm_ManualCal.Create(Application);
Ffrm_Manual .Parent :=Self ;
Ffrm_Manual.Align:=alClient ;
with Ffrm_Manual do但是我在Frame本体里面的释放的时候,有时候会报错,有时候又不报错,如下面所示: procedure Tfrm_ManualCal.btn_CancelClick(Sender: TObject);
begin
if Ffrm_Manual<>nil then
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;
end;
解决方案 »
- delphi 中一个窗体调出另一个窗体问题
- 求职
- 改版后丢失的未解之迷:~~ 获取打印机的状态并控制打印机,问题解决必高分相送!!!
- TClientDataSet写主从表时遇到的问题,望解答
- 实时的显示时间的问题!!(简单噢)
- 玩完了,救救俺吧,散分!!!!
- Delphi6的MSCOmm和SpCOMM控件哪里有?
- 有这样的一个题:就是如何用delphi控制某一网页中<Form>元素中的Action提交,当然我也可能控制<Form>表单中元素的值,比如<Input type='t
- 一个很菜的问题,大家快来拿分!
- 如何卸载ADO?比如2.1,2.5以及2.6的?
- StrCopy遇#0就结束,如何复制WideChar字符?
- 请问如何读取PSafeArray变量?
楼主代码没贴全,看不出问题啊。现在只能建议想办法让问题必现。
另外,释放前加这句判断下
if Assigned(Frame) then
var
frm_Main: Tfrm_Main;
FMainView:TMainView;
Ffrm_Manual:Tfrm_ManualCal ;
我声明为全局变量,但是看不出来
我原来是if Assigned( Ffrm_Manual) 判断,也还是偶尔有,偶尔没有,
下面的代码是在主窗体实现 if Ffrm_Manual<>nil then
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;
if Ffrm_Manual=nil then
begin
Ffrm_Manual :=Tfrm_ManualCal.Create(Application);
Ffrm_Manual .Parent :=Self ;
Ffrm_Manual.Align:=alClient ;
with Ffrm_Manual do下面的代码是在Tfrm_ManualCal窗体里实现// ShowMessage(Ffrm_Manual.ClassName);
if (Ffrm_Manual<>nil) and (Ffrm_Manual.ClassName = 'Tfrm_ManualCal') then
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;
就是有时候有,有时候没有
if (Ffrm_Manual<>nil) and (Ffrm_Manual.ClassName = 'Tfrm_ManualCal') then
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;就是有时候有,有时候没有不好意思,上面忘记写了,是在取消按钮下面的事件
procedure Tfrm_ManualCal.btn_CancelClick(Sender: TObject);
begin
// ShowMessage(Ffrm_Manual.ClassName);
if (Ffrm_Manual<>nil) and (Ffrm_Manual.ClassName = 'Tfrm_ManualCal') then
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;
end;前面说中断不能看到,后面看了是我比较的类名写错了,少些了'Cal',呵呵,Tfrm_Manual改为Tfrm_ManualCal就可以了
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;
if Ffrm_Manual=nil then
begin
Ffrm_Manual :=Tfrm_ManualCal.Create(Application);
Ffrm_Manual .Parent :=Self ;
Ffrm_Manual.Align:=alClient ;
with Ffrm_Manual do
begin
被调用的Frame内部的一个Cancel按钮的事件 procedure Tfrm_ManualCal.btn_CancelClick(Sender: TObject);
begin
// ShowMessage(Ffrm_Manual.ClassName);
if Assigned(Ffrm_Manual) and (Ffrm_Manual.ClassName = 'Tfrm_ManualCal') then
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;
end;
就是报内存越界这个错误
因为btn_Cancel.OnClick释放Frame,会导致btnCancel自己释放,所以可能出错
可以用发WM_Close消息之类的方法关闭,而不是直接Free
begin
Ffrm_Manual.Free ;
Ffrm_Manual:=nil ;
end;
谢谢哈,我使用了下面的方法 SendMessage(Self.Handle, WM_CLOSE, 0, 0)
就可以了
SendMessage(Self.Handle, WM_CLOSE, 0, 0)
方法后,如果下面也有一个 Frame的话,Frame上的按钮的Caption 看不见了,比如我先让FrameA显示了,然后我再显示Fram2,然后我发送WM_CLOSE,然后FramA显示出来,发现按钮上的Caption看不见了,这是为什么呢
下面是有caption