最近在做一个IC卡充值的系统,需要timer控件不停的运行,检测用户是否把卡放在充值机上,但是问题出现了,当弹出一个对话框(如:Msgbox "充值成功!"),此时不点击对话框上的“确定”按钮,而把卡拿走,再把卡放到充值机上就会出现严重性的错误,致使整个系统崩溃。
小弟有个愚蠢的解决办法是每当弹出对话框之前将timer控件关闭,当用户点击“确定”按钮之后再打开timer控件,请问各位高手有什么办法可以解决。

解决方案 »

  1.   

    自己做个窗体,用来模拟Msgbox,当然是非模式的。这样就不会用什么影响了
      

  2.   

    楼上说的对
    还有把IC卡放上去的时候不会触发一个事件?干什么非要用timer?
      

  3.   

    停止timer控件应该是最好的办法了
      

  4.   

    还有一个办法,用一个Label控件提示充值成功。
      

  5.   

    Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long'Msgbox出现的时候会一直被挂起,直到用户对消息框作出响应才继续工作.就是其它事件都不会触发了.你要用上面的"MessageBox"MessageBox me.hWnd, "充值成功!", "提示", 0
      

  6.   

    看来是在 Msgbox "充值成功!" 之后还有读写卡的语句,有几种解决手段:1 把这些语句放到 Msgbox "充值成功!" 之前。使其成为最后一条语句。2 在有可能卡被移走又放回(卡失电复位,回到 Idle 状态)的地方(即使代码运行没有因为对话框而停顿),全部重新重新寻卡(Requst)和激活(Select)。也就是说,最好所有对卡访问的语句前,都重新寻卡、激活,有必要的,重新加载密钥和授权。当然,必要时还要识别是否是刚才的那一张卡。3 所谓系统崩溃,恐怕是未捕获的错误导致程序退出吧?首先搞清除错误的原因,尽可能避免各种 Bug;其次就是利用 On Error 语句捕获错误,进行处理。
      

  7.   

    LGYAN(紫衣随想):我用了很多msgbox,用窗体模拟的话在麻烦
     libao1983:我用Mscomm32控件,放上IC卡会产生OnComm事件,但我对这个事件不熟悉,况且用timer可控件多久执行一次,方便。
    用label的话不显眼,停止timer的话又太多msgbox了,很复杂,MessageBox还没试
    不知还有什么好办法。
    msgbox后面没有对卡操作的语句再有一个问题就是在VB程序中,如果有某处出错(如cint(s),当s不是数字型的时候,就会出现类型不匹配的错误,致使整个程序崩溃),有没办法写一个事件,整个系统中一旦有错误出现就自动执行到那个事件?PB就有个system_err事件。
      

  8.   

    On Error Goto ErrorHandler
      '此处程序代码
      '......
      Exit Sub '或 Exit FunctionErrorHandler
      '此处错误处理
      '......
      

  9.   

    用msgbox在未编绎的时候是挂起的,但编绎成exe后不被挂起,现在是要找一个能挂起的。
    of123()说得对,现在我在timer事件里都加了on error resume next
      

  10.   

    of123()的方法
    On Error Goto ErrorHandler
      '此处程序代码
      '......
      Exit Sub '或 Exit FunctionErrorHandler
      '此处错误处理
      '......
    你的方法是必须在每个过程、函数、事件都用错误处理
    我想的是做一个就行了,程序当中任何一处出错都可转到那个错误处理程序。
      

  11.   

    没人来顶了
    在VB程序中,如果有某处出错(如cint(s),当s不是数字型的时候,就会出现类型不匹配的错误,致使整个程序崩溃),有没办法写一个事件,整个系统中一旦有错误出现就自动执行到那个事件?PB就有个system_err事件。
      

  12.   

    VB 没有这样的机制。MSDN 所推荐的所谓“集中式的错误处理”实际上是把相关的操作写入一个公用的过程或函数,其中编写错误捕捉和处理代码。
      

  13.   

    你提示的时候不要用msgbox 自已做一个提示窗口就成了.