vb中CommonDialog的cancelerror属性到底有什么用

DQYDXT 2017-05-04 07:15:40
最近在用vb编程的时候遇到了一个问题,当我用通用对话框CommonDialog打开文件并且进行操作的时候,文件可以正常打开
但是,一旦点击取消的时候,就会出现错误52,错误的文件名或号码。

但是我cancelerror的属性设置的是false啊,为什么还是会出现错误提示呢,不是设置为true才会 出现错误提示吗
然后我在过程中加入了on error goto errorhandle,errorhandle:在最后,就可以正常运行

那么cancelerror的属性到底是干什么的呢,求各位大神解答
...全文
660 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
一笑拔剑 2017-05-10
  • 打赏
  • 举报
回复
都说完了,我就不废话了
DQYDXT 2017-05-05
  • 打赏
  • 举报
回复
引用 3 楼 of123 的回复:
如下处理,可以在用户点击 Cancel 时跳过正常处理。
    On Error GoTo errorhandler
    With CommonDialog1
        'get filename
        .Filter = "S Files(*.S)|*.S|Bin Files(*.bin)|*.bin" '|Dat Files(*.dat)|*.dat|Document Files(*.txt;*.dat)|*.txt;*.dat|All Files(*.*)|*.*|"
        .CancelError = True
        .Flags = 6
        .ShowOpen
       '下面是对文件的正常处理
    '......
   
errorhandler:
    If Err.Number = cdlCancel Then Exit Sub
    MsgBox "Runtime Error: " & Err.Number & "(Ox" & Hex(Err.Number) & ")" & vbCrLf & Err.Description
 
也就是说,当我点击取消时,程序还会继续读取下一段代码?需要我做一定的处理才不会继续执行下去?
DQYDXT 2017-05-05
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
你自己的逻辑有问题。 cancelerror属性设置成False,是指在你点“取消”时,这个对话框控件不会给你抛出异常、正常关闭并返回。 但是,这种情况下“返回”后,文件名是“空”的, 然而你后面的代码却按“正常打开”进行操作,当然就可能出现“52”的异常了啊。 一般都是把这个属性设置成True的,并且开启“异常捕获”, 当点“取消”时,抛出异常,然后利用异常捕获机制,跳过“正常操作”的部分,起到“取消操作”的作用。
明白您说的意思了,看来是我理解错误了,谢谢
of123 2017-05-05
  • 打赏
  • 举报
回复
如下处理,可以在用户点击 Cancel 时跳过正常处理。
    On Error GoTo errorhandler
    With CommonDialog1
        'get filename
        .Filter = "S Files(*.S)|*.S|Bin Files(*.bin)|*.bin" '|Dat Files(*.dat)|*.dat|Document Files(*.txt;*.dat)|*.txt;*.dat|All Files(*.*)|*.*|"
        .CancelError = True
        .Flags = 6
        .ShowOpen
       '下面是对文件的正常处理
    '......
   
errorhandler:
    If Err.Number = cdlCancel Then Exit Sub
    MsgBox "Runtime Error: " & Err.Number & "(Ox" & Hex(Err.Number) & ")" & vbCrLf & Err.Description
 
of123 2017-05-05
  • 打赏
  • 举报
回复
是这样:当 .CancelError = True 后,点击 Cancel 键关闭对话框时系统会触发一个错误,其错误号是 cdlCancel。因为已经有 On Error GoTo errorhandler,此时就后跳到 errorhandler: 处。我们在这里加上 If Err.Number = cdlCancel Then Exit Sub 就是忽略此错误。
舉杯邀明月 2017-05-05
  • 打赏
  • 举报
回复
引用 5 楼 DQYDXT 的回复:
[quote=引用 3 楼 of123 的回复:] 如下处理,可以在用户点击 Cancel 时跳过正常处理。
    On Error GoTo errorhandler
    With CommonDialog1
        'get filename
        .Filter = "S Files(*.S)|*.S|Bin Files(*.bin)|*.bin" '|Dat Files(*.dat)|*.dat|Document Files(*.txt;*.dat)|*.txt;*.dat|All Files(*.*)|*.*|"
        .CancelError = True
        .Flags = 6
        .ShowOpen
       '下面是对文件的正常处理
    '......
   
errorhandler:
    If Err.Number = cdlCancel Then Exit Sub
    MsgBox "Runtime Error: " & Err.Number & "(Ox" & Hex(Err.Number) & ")" & vbCrLf & Err.Description
 
也就是说,当我点击取消时,程序还会继续读取下一段代码?需要我做一定的处理才不会继续执行下去?[/quote] 这儿的代码: 执行代码第7行: 显示对话框,等待你选择文件,打开……    如果此时点“取消”,对话框关闭、返回,执行流程就跳转到第12行…… 其它的,还用得着多说吗?
王二.麻子 2017-05-04
  • 打赏
  • 举报
回复
With DLG
.Filter = "*.HEX"
.ShowOpen
If .FileName = "" Then
Exit Sub
Else
'文件内容转存到ED2Flash()中
FillEd2Flash .FileName
End If
End With
舉杯邀明月 2017-05-04
  • 打赏
  • 举报
回复
你自己的逻辑有问题。 cancelerror属性设置成False,是指在你点“取消”时,这个对话框控件不会给你抛出异常、正常关闭并返回。 但是,这种情况下“返回”后,文件名是“空”的, 然而你后面的代码却按“正常打开”进行操作,当然就可能出现“52”的异常了啊。 一般都是把这个属性设置成True的,并且开启“异常捕获”, 当点“取消”时,抛出异常,然后利用异常捕获机制,跳过“正常操作”的部分,起到“取消操作”的作用。

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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