获得焦点,为什么会出现“Access violation”错误!(30分)

  • 主题发起人 主题发起人 shephard
  • 开始时间 开始时间
S

shephard

Unregistered / Unconfirmed
GUEST, unregistred user!
frm_quanxian打开frm_ygselect,在按了frm_ygselect上一按钮后关闭frm_ygselect,
并且使frm_quanxian上的dbedit1获得焦点,为什么会出现“Access violation!
代码如下:
procedure Tfrm_quanxian.BitBtn1Click(Sender: TObject);
begin
frm_ygselect.Show ;
end;

procedure Tfrm_ygselect.BitBtn1Click(Sender: TObject);
begin
close;
frm_quanxian.dbedit1.SetFocus ;
end;
 
你已经把窗体关闭了,btn1也就不存在了,还让它去执行语句,怎么可以呢?
 
我该成这样,错误还是一样!
procedure Tfrm_ygselect.BitBtn1Click(Sender: TObject);
begin
frm_quanxian.dbedit1.SetFocus ;
close;
end;
 
改成后来的肯定要出错:)
一个笨的办法,点击按钮之后留下一个全局标示或者是在Frm_quanxian里设定一个boolean
的属性,然后再Frm_quanxian的onshow里面判断如果true就是的那个按钮得到焦点。
 
frm_quanxian是project自动创建的,还是你自己生成的
 
Frm_quanxian并没有关闭啊,怎么会写在onshow里面呢?

而且这么常规的功能难道需要这么复杂吗?
 
如果两个都是project自动创建的,在我的机子上执行你的程序一点也没错!
windows2000 + delphi6
 
你的代码在我这里没错,好好看看Pipi.的话。
 
我是手工生成的, runform(Tfrm_ygselect) ;
function RunForm(TForm:TFormClass):Integer;
begin
with TForm.Create(Application) do
begin
ShowModal;
Free;
end;
end;

如果问题出在这里该怎么改?请各位给我个帮助,谢谢!
 
那就是了,是个自动放在那里的全局变量,并不是你看到的窗口
 
你可以另外找个地方放你的 Tfrm_quanxian 对象啊
如果frm_quanxian总共只会出现一个,那么创建的时候 frm_quanxian:=TForm.Create(Application)
也是可以的
要是有多个,那么创建 Tfrm_ygselect 的时候把当前 Tfrm_quanxian作为 Tfrm_ygselect 的owner
在 Tfrm_ygselect 里面得到 owner 就是得到 Tfrm_quanxian也是可以的
 
不好意思,能不能给我写段具体的代码?我实在是懂您的意思就是不知道怎么写!
 
function RunForm(TForm:TFormClass):Integer;
begin
frm_quanxian:=TForm.Create(Application)
with frm_quanxian do
begin
ShowModal;
Free;
end;
end
 
后退
顶部