CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

程序有错误的时候,出现错误提示后,点停止程序,vb就退出了

楼主fengyin520(fy)2005-12-30 17:39:52 在 VB / 基础类 提问

程序原来不是这样的,后来不知是什么时候开始的,我的程序里如果有错误,比如变量未定义,数组溢出等问题的时候,vb会提示出错误的原因,然后点停止程序按钮,整个vb就退出了.很苦恼啊,有时候还没保存就点运行然后出问题后vb退出,白编了,而新建一个工程,就不会退出!高手帮忙解答一下 问题点数:10、回复次数:14Top

1 楼Summer006(脸都丢尽了!闭关修练。。。。)回复于 2005-12-30 17:43:35 得分 5

是否拦截了窗口的消息,用自己的过程处理消息?  
  是否用了api直接操控内存?        
  我只遇到过这2种直接退出的情况。  
  其他还有什么会导致,就不知道了  
  Top

2 楼fxj331072(白天与黑夜)回复于 2005-12-30 17:45:36 得分 0

on   error   goto   next   '如果错误继续运行  
  建议用if语句,或错误捕捉.Top

3 楼fengyin520(fy)回复于 2005-12-30 18:26:46 得分 0

最近在程序里新加了一个控制窗口到达一定尺寸时,拖动操作不管用的模块,没有用普通的方法处理,因为普通的方法会使窗口闪烁,难道是这个模块的原因?  
   
  '控制窗体最小限定的代码  
  '新建一个标准模块.  
  '代码如下  
  Declare   Function   SetWindowLong   Lib   "user32"   Alias   "SetWindowLongA"   _  
      (ByVal   hWnd   As   Long,   ByVal   nIndex   As   Long,   ByVal   dwNewLong   As   Long)   As   Long  
    Declare   Function   GetWindowLong   Lib   "user32"   Alias   "GetWindowLongA"   _  
      (ByVal   hWnd   As   Long,   ByVal   nIndex   As   Long)   As   Long  
    Declare   Function   CallWindowProc   Lib   "user32"   Alias   "CallWindowProcA"   _  
      (ByVal   lpPrevWndFunc   As   Long,   ByVal   hWnd   As   Long,   ByVal   Msg   As   Long,   _  
        ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
   
    Declare   Sub   CopyMemory   Lib   "KERNEL32"   Alias   "RtlMoveMemory"   (   _  
        lpvDest   As   Any,   lpvSource   As   Any,   ByVal   cbCopy   As   Long)  
    Public   Const   GWL_WNDPROC   =   (-4)  
    Public   Const   WM_GETMINMAXINFO   =   &H24  
    Type   POINTAPI  
                  x   As   Long  
                  y   As   Long  
    End   Type  
    Type   MINMAXINFO  
                  ptReserved   As   POINTAPI  
                  ptMaxSize   As   POINTAPI  
                  ptMaxPosition   As   POINTAPI  
                  ptMinTrackSize   As   POINTAPI  
                  ptMaxTrackSize   As   POINTAPI  
    End   Type  
    Public   preWinProc   As   Long  
   
    Public   Function   wndproc(ByVal   hWnd   As   Long,   ByVal   Msg   As   Long,   _  
                                                    ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
    Dim   lwd   As   Long,   hwd   As   Long  
    If   Msg   =   WM_GETMINMAXINFO   Then  
            Dim   maxmin   As   MINMAXINFO  
            CopyMemory   maxmin,   ByVal   lParam,   Len(maxmin)  
            'maxmin.ptMaxTrackSize.x   =   1000   '设定最大Resize的宽度  
            'maxmin.ptMaxTrackSize.y   =   800'设定最大Resize的高度  
            maxmin.ptMinTrackSize.x   =   800   '设定最小Resize的宽度  
            maxmin.ptMinTrackSize.y   =   600   '设定最小Resize的高度  
            CopyMemory   ByVal   lParam,   maxmin,   Len(maxmin)  
    Else  
          wndproc   =   CallWindowProc(preWinProc,   hWnd,   Msg,   wParam,   lParam)  
    End   If  
    End   Function  
   
  Top

4 楼iangenius(奋斗中拥有)回复于 2005-12-30 18:40:10 得分 0

没碰到过,2楼的好象不信!!!Top

5 楼fengyin520(fy)回复于 2005-12-30 18:42:34 得分 0

然后在load   和unload   里有如下代码  
  Private   Sub   MDIForm_Load()  
  frmSplash.Show  
  DoEvents  
  Call   MDIfrmMainInit  
  TimerMain.Enabled   =   True  
  Unload   frmSplash  
   
  '控制窗体最小限定的代码  
  Dim   ret   As   Long  
  preWinProc   =   GetWindowLong(Me.hWnd,   GWL_WNDPROC)  
  ret   =   SetWindowLong(Me.hWnd,   GWL_WNDPROC,   AddressOf   wndproc)  
  '控制窗体最小限定的代码  
  End   Sub  
   
  Private   Sub   MDIForm_Unload(Cancel   As   Integer)  
  TimerMain.Enabled   =   False  
  '控制窗体最小限定的代码  
  Dim   ret   As   Long  
  ret   =   SetWindowLong(Me.hWnd,   GWL_WNDPROC,   preWinProc)  
  '控制窗体最小限定的代码  
  End   SubTop

6 楼fengyin520(fy)回复于 2005-12-30 18:53:09 得分 0

果然是这个限制窗口最小的模块惹的祸   ,我对这段代码不太懂   ,也是借用别人的模块,来实现自己的功能,哪位高手能看看这段代码为什么会使vb退出呢?Top

7 楼laidon(走进.NET,开创新生活)回复于 2005-12-30 22:50:07 得分 2

偶觉得楼主在没有查明原因前要设置在每次运行调试前自动保存程序,如二楼所说,一些api错误和内存溢出会导致ide崩溃Top

8 楼hank212(IT民工)回复于 2005-12-31 08:26:45 得分 0

on   error   goto   nextTop

9 楼Summer006(脸都丢尽了!闭关修练。。。。)回复于 2005-12-31 09:40:53 得分 0

ret   =   SetWindowLong(Me.hWnd,   GWL_WNDPROC,   AddressOf   wndproc)  
   
  你这就是拦截窗口消息自己处理嘛。就是这个导致的。  
  不信就把setwindowslong,getwindowslong三句注释掉,保准出错也不会直接退出ide了。  
   
  如果消息的制造者是自己的另一个程序,那倒可以把消息替换成不常用的事件,然后在事件里面写处理代码。这个方法我屡试不爽,环保又卫生。  
  但如果无法控制消息产生,比如要实现鼠标在非标题区也能拖动窗体,就没法了。Top

10 楼fengyin520(fy)回复于 2005-12-31 11:19:27 得分 0

这个代码就是使窗体拖小到一定程度就不能再小了,那怎么把他替换成不常用的事件,又怎样写处理代码:)Top

11 楼Summer006(脸都丢尽了!闭关修练。。。。)回复于 2005-12-31 12:14:33 得分 0

这个没办法,因为消息是windows产生的,修改不了.Top

12 楼fengyin520(fy)回复于 2005-12-31 12:20:55 得分 0

呵呵,谢谢啊,我现在是先把这断代码屏蔽掉,等程序正式出炉的时候加上:)Top

13 楼mysticboy(_๑۩۞۩๑۰•●|麦۞壳۞饼|●•۰๑۩۞۩๑_)回复于 2005-12-31 12:22:17 得分 3

回调   从来都是这样。难调试就在这里。  
  我从来都是设置VB在每次运行前保存。  
  这样即使死掉了也不会丢代码哦!  
  哈哈!楼猪一定要记得在选项里设置这个。  
  别告诉我你不知道在那设置!Top

14 楼sqfeiyu(流星雨)回复于 2005-12-31 14:22:11 得分 0

不要亂用API﹐都是API惹得禍~~Top

相关问题

  • 程序退出时,出现错误提示,请教怎么排除错误?
  • 错误提示!
  • 错误提示
  • 退出IE时系统提示读内存某地址错误
  • 为何每次退出时都有错误提示
  • 在VB中CreateObject("Word.Application")时提示自动化错误?
  • 为什么vb+access2000时,用insert into会提示-2147217900错误
  • vb+access 删除临时表时提示错误,请帮忙!
  • 安装vb后提示trim函数错误
  • 从vb改成c#的语句提示错误。

关键词

  • 代码
  • 模块
  • 控制
  • 消息
  • vb
  • me
  • 程序
  • 退出
  • 错误
  • wndproc

得分解答快速导航

  • 帖主:fengyin520
  • Summer006
  • laidon
  • mysticboy

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo