怎么避免动态控件重复生成导致程序报错。(送100分,先解决问题者独送) ( 积分: 100 )

  • 主题发起人 主题发起人 mimiafei
  • 开始时间 开始时间
M

mimiafei

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中创建一个DBGrid控件,固定动态控件名称。程序运行时发现一个问题,如果多次启动这个事件,程序就会报错,怎么解决这个问题?谢谢!
 
我在程序中创建一个DBGrid控件,固定动态控件名称。程序运行时发现一个问题,如果多次启动这个事件,程序就会报错,怎么解决这个问题?谢谢!
 
动态创建的别忘了FreeAndNil;
另外在创建之前还可以判断是不是存在撒,
如:if Assigned(AComponent) then
FreeAndNil(AComponent)
else
......
 
创建控件的时候先检查这个名称的控件是否已经存在了,例:
if FindComponent('控件名称') <> nil then
exit;
 
都试过了。没有作用。谢谢!
 
那楼主就要分析到底是哪里的问题了!
 
程序加上相关语句,编译时没有报错,说明认可了在动态创建控件前的判断。我是想在同时在RzGroup2.items0click中创建动态控件,在RzGroup2的ONCLOSE事件中释放动态控件。在单击RzGroup2.items0click就报错了。怎么在动态控件生成前判断或生成一次后判断?谢谢!
 
把代码贴出来吧,这样说不清楚的
 
關閉時對窗體全部FREE
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Free;
Form1:=Nil;
FreeAndNil(Form1);
end;
 
打个简单比喻,在form1上放置一个button,单击button后产生一个动态控件,而这个控件是唯一的。我就是想怎么防止多次重复单击button避免多次生成同样的动态控件。谢谢!
 
var myControl: TDBGrade;
procedure Form.Button1.OnClick(Object Sender);
begin
if not Assigned(myControl) then
begin
myControl := TDBGrade.Create(self);
myControl.parent = self;
...
end;
end;

procedure Form.Button2.OnClick(Object Sender);
begin
if Assigned(myControl) then
begin
FreeandNil(myControl);
end;
end;
 
后退
顶部