try
 szSelected:= dbgrdShowData.SelectedField.Text;  except
        MessageBox(Handle,'还没有选择要查看的信息,请选择','错误',MB_ICONERROR);
   end;dbgrdShowData是一个DBGrid,我希望得到他选中的Cell的信息,如果这个时候dbgrdShowData里面没有数据或者是用户没有进行选择,就弹出一个错误提示框,为什么根本不行?不是出现异常会转入except进行处理的么?怎么还是弹出系统的那个错误框的啊,---------------------------
Debugger Exception Notification
---------------------------
Project ExamInfoManager.exe raised exception class EAccessViolation with message 'Access violation at address 0047F73D in module 'ExamInfoManager.exe'. Read of address 000000D2'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------

解决方案 »

  1.   

    错误在try 之前已经发生了~~
      

  2.   

    没,我单步过了。进入了try,好好的,一运行到szSelected:= dbgrdShowData.SelectedField.Text;这一行后,弹了系统错误框
      

  3.   

    LZ是工作还是搞着玩。delphi已经快要退出历史舞台了。
      

  4.   

    异常处理是有用的,
    不过有些异常,dELPHI捕获不到而已
      

  5.   

    delphi那个异常处理基本是垃圾。
      

  6.   

    你是用单步调试的,所以异常会先被编译器捕捉了,如果你直接运行编译好的EXE就会触发你捕捉的异常信息了.
      

  7.   

    3楼闪一边去
    有我们在,DELPHI就不会倒
    而且从08起DELPHI已经慢慢恢复元气
    楼主代码写错了
    要这样写
    try
    ...........
    except
    exit;
    ShowMessage('error');
    end;很多书上对DELPHI的异常处理都写错了
    少了exit楼主给点会吧
    我没分用了
    谢谢
      

  8.   

    try..except..end在执行EXE的时候才会弹出你的提示框,在DELPHI环境下运行是不会的。
    不过楼主我觉得你可以用if DbGrid.DataSource.DataSet.RecordCount = 0 then
    来判断DBGrid里面有没有数据。
      

  9.   

    晕,都错了.你的代码那样是可以的,你在IDE环境下当然会弹出那个框口了,如果你编译成EXE再运行就不会这样了.不过你的代码根本不需要有try...Excep...直接这样写就行了:if assigned(dbgrdShowData.SelectedField) then
      szSelected:= dbgrdShowData.SelectedField.Text;
      

  10.   

    我直接运行,不调试一样弹系统错误框。算了,感谢各位啦8#说的我早就试过了,毕竟我也是混CSDN的,GOOGLE总是会用的。结贴。这段时间在Delphi问了好多问题,貌似就1-2个有人回答满意了,解决了我的问题