还是关于全局变量的问题,给分100

pctuzi 2003-10-16 01:09:08
我正在开发一个软件,单位的小软件。领导要求做得漂亮点。可是传统的对话框方式的报错信息太土了,领导要重新弄个form。可是我碰到一个问题,就是全局变量的问题。我原来用vb的,改用delphi。可是我不知道怎么把错误信息传递到报错窗体。看了很多贴子,大家都说全局变量不好。可是谁能教教我,怎么不用全局变量解决这个问题。比如提交窗体的edit1的值为空,应传递‘错误1’信息。如果edit2的值为空,应传递"错误2"信息。请解答的细致点,谢了!
...全文
32 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuangbx220 2003-12-22
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/TopicView1.asp?id=2588116

我的问题也是这样,结果变量值没有了,,,所有代码都在上面.
IORILI 2003-10-16
  • 打赏
  • 举报
回复
看看这个:

procedure TForm1.Button1Click(Sender: TObject);
resourcestring
aa='错误1';
bb='错误2';
begin
if edit1.Text='' then
raise Exception.CreateRes(@aa);
if edit2.Text ='' then
raise Exception.CreateRes(@bb);
end;
EastBuBai 2003-10-16
  • 打赏
  • 举报
回复
做个异常处理不就可以了吗
csntgao 2003-10-16
  • 打赏
  • 举报
回复
只有flyinwuhan(超越) 的回答还和问题挂钩,别人都是不知所云就胡乱作答
IORILI 2003-10-16
  • 打赏
  • 举报
回复
up
delphi_xizhousheng 2003-10-16
  • 打赏
  • 举报
回复
可以用APPLICATIONEVENT
saien 2003-10-16
  • 打赏
  • 举报
回复
1.用异常处理.比如
try
//这里如果出错就会跳到except中去
except或者finally
//在这里跳出报错信息.比如说打开你自己的窗体
end;
2.对于同类型的控件可以如下处理
Case (Sender as Tedit).tag of
1:
2:
3:
end;

flyinwuhan 2003-10-16
  • 打赏
  • 举报
回复
当然,报错的窗体要Uses MainForm.
flyinwuhan 2003-10-16
  • 打赏
  • 举报
回复
用全局变量也没什么嘛!

不过,如果不用全局变量,可以这样:
在主窗体的public部分声明一个String成员变量,例如m_sError;

出错后,
m_sError := 错误1..错误2..;

然后,负责报错的窗体可以这样得到错误信息:
var
s : String;
s := MainForm.m_sError;//假设主窗体的名称是MainForm

往下不用讲了...
lovelymelon 2003-10-16
  • 打赏
  • 举报
回复
你的意思是不是在最后提交时,先对edit进行检测,如果edit1为空,传递“错误1”信息,如果edit2为空,传递“错误2”信息?
如果是这样,好像要对所有的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;
lovelymelon 2003-10-16
  • 打赏
  • 举报
回复
你的意思是不是在最后提交时,先对edit进行检测,如果edit1为空,传递“错误1”信息,如果edit2为空,传递“错误2”信息?
如果是这样,好像要对所有的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;
tigerhohoo 2003-10-16
  • 打赏
  • 举报
回复
在你人为输入参数不正确的地方加上 raise ERangeError.CreateFmt();
在外层使用try except捕获.
pankun 2003-10-16
  • 打赏
  • 举报
回复
把你的代码加在try...except中就可以了.
pankun 2003-10-16
  • 打赏
  • 举报
回复
用异常处理.比如
try
//这里如果出错就会跳到except中去
except
//在这里跳出报错信息.比如说打开你自己的窗体
end;
pctuzi 2003-10-16
  • 打赏
  • 举报
回复
可否具体点,我是菜鸟
Kingron 2003-10-16
  • 打赏
  • 举报
回复
异常~~~~~~~~~

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧