我正在开发一个软件,单位的小软件。领导要求做得漂亮点。可是传统的对话框方式的报错信息太土了,领导要重新弄个form。可是我碰到一个问题,就是全局变量的问题。我原来用vb的,改用delphi。可是我不知道怎么把错误信息传递到报错窗体。看了很多贴子,大家都说全局变量不好。可是谁能教教我,怎么不用全局变量解决这个问题。比如提交窗体的edit1的值为空,应传递‘错误1’信息。如果edit2的值为空,应传递"错误2"信息。请解答的细致点,谢了!

解决方案 »

  1.   

    用异常处理.比如
      try
        //这里如果出错就会跳到except中去
      except
       //在这里跳出报错信息.比如说打开你自己的窗体
      end;
      

  2.   

    把你的代码加在try...except中就可以了.
      

  3.   

    在你人为输入参数不正确的地方加上  raise  ERangeError.CreateFmt();
      在外层使用try except捕获.
      

  4.   

    你的意思是不是在最后提交时,先对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;
      

  5.   

    你的意思是不是在最后提交时,先对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;
      

  6.   

    用全局变量也没什么嘛!不过,如果不用全局变量,可以这样:
    在主窗体的public部分声明一个String成员变量,例如m_sError;出错后,
    m_sError := 错误1..错误2..;然后,负责报错的窗体可以这样得到错误信息:
    var
      s : String;
      s := MainForm.m_sError;//假设主窗体的名称是MainForm往下不用讲了...
      

  7.   

    当然,报错的窗体要Uses MainForm.
      

  8.   

    1.用异常处理.比如
      try
        //这里如果出错就会跳到except中去
      except或者finally
       //在这里跳出报错信息.比如说打开你自己的窗体
      end;
    2.对于同类型的控件可以如下处理
     Case (Sender as Tedit).tag  of
     1:
     2:
     3:
     end;
      

  9.   

    只有flyinwuhan(超越) 的回答还和问题挂钩,别人都是不知所云就胡乱作答
      

  10.   

    看看这个: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;
      

  11.   

    http://expert.csdn.net/Expert/TopicView1.asp?id=2588116我的问题也是这样,结果变量值没有了,,,所有代码都在上面.