下面的代码写在unit2(form2)中,它调用在电子邮件和密码框中输入的值(在form1中),昨天代码工作正常,我做了一些更改,现在:这段代码没有' t work,当我单击Button COMMENCER时,它会引发Access Violation错误:
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 := 'myemail@yahoo.com';
password := 'mypass';
MD5 := GetMD5;
MD5.Init;
etc etc......
问题:
为什么?
答案 0 :(得分:3)
你在哪里创建form1对象?听起来它在你访问它之前没有初始化,因此你得到AV。
您的第二个代码可以正常工作,因为您不必在访问或为其分配值之前初始化字符串变量,而是直接分配它们,而不是通过form1变量。
但断点为email := form1.ed_Email.Text;
并查看form1是否为nil
。
答案 1 :(得分:1)
我认为你必须创建form1(因为我觉得它在你的情况下是可用的形式)..你可能已经关闭并释放了表单,所以,你的
email := form1.ed_Email.Text;
正在提供AV,因为form1不存在(因为它现在被释放),所以你不能拥有 ed_Email.Text 值。
在按 Btn_commencer
之前,请确保您没有关闭form1(释放)答案 2 :(得分:1)
您始终可以检查是否已首先创建表单以避免访问冲突。
如果已分配(Form1) 开始 //作业 端;