2011-12-29 92 views
-1

下面的代码是写在unit2(form2)中,它调用在电子邮件和密码框(form1)中输入的值,昨天代码工作完美,我做了一些更改,现在:此代码不起作用,当我按一下按钮COMMENCER它会引发访问冲突错误:影响变量值时访问冲突?

procedure TForm2.Btn_commencerClick(Sender: TObject); 
    begin 

    email := form1.ed_Email.Text;// <----- LOOK HERE 
    password := form1.Ed_typedpass.Text; // <-----AND HERE 
    MD5 := GetMD5; 
    MD5.Init; 
    MD5.Update(TByteDynArray(RawByteString(password)), Length(password)); 
    password := LowerCase(MD5.AsString); 

    etc....... 

但此代码的工作:

email := '[email protected]'; 
password := 'mypass'; 
MD5 := GetMD5; 
MD5.Init; 
etc etc...... 

问题:

为什么?

+0

访问冲突在您的代码中出现? – PresleyDias 2011-12-29 11:31:09

+0

在这一行:email:= form1.ed_Email.Text; 地址为0067A868(读取地址为0000038C)的访问冲突 – 2011-12-29 11:38:11

回答

3

你在哪里创建你的form1对象?听起来像它没有初始化之前,你访问它,因此你得到AV。

您的第二个代码有效,因为您在访问或赋值给它们之前不必初始化字符串变量,而是直接分配它们,而不是通过form1变量。

但断点到email := form1.ed_Email.Text;并看看如果form1是nil或不。

1

我认为你必须创建在Form1(因为我认为它可利用的形式在您的情况)......你可能已经关闭并释放形式的话,你的

email := form1.ed_Email.Text; 

是给AV,为Form1不存在(因为它现在释放),所以你不能有ed_Email.Text值。

确保按Btn_commencer

1

如果表单已创建第一个以避免访问冲突,您可以随时检查前你不关闭在Form1(释放)。

if if assigned(Form1)then begin // assignments end;

+0

+1,这是一种检查可用表单的好方法,如果它们是创建或不是。 @Rafik但请确保您使用的Form1变量是不是您的程序本地,但您的实际form1名称(全球) – PresleyDias 2011-12-30 05:07:28