我想将Button1Click事件处理程序的代码包装到名为Show()的函数中,以便以后重用它。
事件处理程序代码:
procedure TForm2.Button1Click(Sender: TObject);
begin
email := Form1.ed_Email.Text;
password := Form1.Ed_typedpass.Text;
MD5 := GetMD5;
MD5.Init;
MD5.Update(TByteDynArray(RawByteString(password)), Length(password));
password := LowerCase(MD5.AsString);
end
当我将下面的代码放入我的脚本时,我得到非声明的变量错误(因为我调用的是未在我的脚本中声明的变量)但实际情况并非如此。
所有变量在程序内部都能正常工作,但不能在函数内部工作吗?
function Show();
begin
email := Form1.ed_Email.Text;
password := Form1.Ed_typedpass.Text;
MD5 := GetMD5;
MD5.Init;
MD5.Update(TByteDynArray(RawByteString(password)), Length(password));
password := LowerCase(MD5.AsString);
end;
答案 0 :(得分:5)
在整个代码中,您似乎试图使用全局变量或成员变量,而应使用局部变量。不要那样做。这是一种不好的做法,将来会给你带来巨大的痛苦。在以错误的方式编写太多代码之前,就要失去这种坏习惯。
始终在可能的地方使用局部变量。
procedure Show;
var
email: string;
password: string;
MD5: TMD5;
begin
email := Form1.ed_Email.Text;
password := Form1.Ed_typedpass.Text;
MD5 := GetMD5;
MD5.Init;
MD5.Update(TByteDynArray(RawByteString(password)), Length(password));
password := LowerCase(MD5.AsString);
end;
我不得不猜测MD5
的类型,但您可以用实际类型替换它。
如果确实需要使用成员,则将它们作为参数传递给方法,或者使该过程成为拥有成员的表单类的方法。
这些变量似乎可能是TForm2
的成员,如果您真的需要它们成为TForm2
的成员,那么您可能应该Show
TForm2
方法。也就是说,Show
是一个糟糕的名称选择,因为它已经是TForm
的一种方法。
我也猜到了password
的类型,但也许需要AnsiString
来判断MD5.Update
调用中的类型转换。或者,Length
可能应为ByteLength
。换句话说,我怀疑你在MD5.Update
行中有一个错误,一旦你得到编译代码就会显露出来。
答案 1 :(得分:1)
Function
中的{p> Delphi
不能没有返回类型
尝试将其变成Procedure
您还没有提到功能减速的基类
试试这个
Procedure TForm1.Show();//TForm2 based on your decelaration
begin
email := Form1.ed_Email.Text;
password := Form1.Ed_typedpass.Text;
MD5 := GetMD5;
MD5.Init;
MD5.Update(TByteDynArray(RawByteString(password)), Length(password));
password := LowerCase(MD5.AsString);
end;