我正在开发一个软件,单位的小软件。领导要求做得漂亮点。可是传统的对话框方式的报错信息太土了,领导要重新弄个form。可是我碰到一个问题,就是全局变量的问题。我原来用vb的,改用delphi。可是我不知道怎么把错误信息传递到报错窗体。看了很多贴子,大家都说全局变量不好。可是谁能教教我,怎么不用全局变量解决这个问题。比如提交窗体的edit1的值为空,应传递‘错误1’信息。如果edit2的值为空,应传递"错误2"信息。请解答的细致点,谢了!
调试欢乐多
try
//这里如果出错就会跳到except中去
except
//在这里跳出报错信息.比如说打开你自己的窗体
end;
在外层使用try except捕获.
如果是这样,好像要对所有的edit进行逐个判断,然后根据edit后面的数字传递错误信息遍历提交窗口的所有控件,如果是TEdit,判断procedure TForm1.Button2Click(Sender: TObject);
var
i,j,n:integer;
s1:string;
begin
i:=form1.ControlCount;
if i>0 then
begin
for j:=0 to i-1 do
begin
if form1.Controls[j].ClassName='TEdit' then
begin
s1:=(form1.Controls[j] as TEdit).Name;
n:=strtoint(copy(s1,5,1));
if (form1.Controls[j] as Tedit).Text='' then
begin
showmessage('错误'+inttostr(n)+':不能为空');
end;
end;
end;
end;
end;
如果是这样,好像要对所有的edit进行逐个判断,然后根据edit后面的数字传递错误信息遍历提交窗口的所有控件,如果是TEdit,判断procedure TForm1.Button2Click(Sender: TObject);
var
i,j,n:integer;
s1:string;
begin
i:=form1.ControlCount;
if i>0 then
begin
for j:=0 to i-1 do
begin
if form1.Controls[j].ClassName='TEdit' then
begin
s1:=(form1.Controls[j] as TEdit).Name;
n:=strtoint(copy(s1,5,1));
if (form1.Controls[j] as Tedit).Text='' then
begin
showmessage('错误'+inttostr(n)+':不能为空');
end;
end;
end;
end;
end;
在主窗体的public部分声明一个String成员变量,例如m_sError;出错后,
m_sError := 错误1..错误2..;然后,负责报错的窗体可以这样得到错误信息:
var
s : String;
s := MainForm.m_sError;//假设主窗体的名称是MainForm往下不用讲了...
try
//这里如果出错就会跳到except中去
except或者finally
//在这里跳出报错信息.比如说打开你自己的窗体
end;
2.对于同类型的控件可以如下处理
Case (Sender as Tedit).tag of
1:
2:
3:
end;
resourcestring
aa='错误1';
bb='错误2';
begin
if edit1.Text='' then
raise Exception.CreateRes(@aa);
if edit2.Text ='' then
raise Exception.CreateRes(@bb);
end;