VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 3109|回复: 5

[原创] with 竟然是可执行语句!

[复制链接]
发表于 2015-8-24 10:42:59 | 显示全部楼层 |阅读模式
本帖最后由 VBProFan 于 2015-8-24 12:42 编辑

之前我一直以为 with 的设计只是为了书写代码简洁,编译器编译前会把 with 后面的内容复制到被它括起来的代码段内每个“.”开始的语句前面。但是刚才我发现我错了:
  1.   With adoFriendFilter.Recordset
  2.     adoFriendFilter.RecordSource = "select * from tbl"
  3.     adoFriendFilter.Refresh
  4.     .MoveFirst
  5.   End With
复制代码
出错: Object variable or With block variable not set.
  1.   adoFriendFilter.RecordSource = "select * from tbl"
  2.   adoFriendFilter.Refresh

  3.   With adoFriendFilter.Recordset
  4.     .MoveFirst
  5.   End With
复制代码
正常运行。
发表于 2015-8-24 21:20:40 | 显示全部楼层
你好火星啊
之前我一直以为 with 的设计只是为了书写代码简洁,编译器编译前会把 with 后面的内容复制到被它括起来的代码段内每个“.”开始的语句前面。


那你来看看这个代码:

Form1.frm

Private Function Test() As Form
MsgBox "Test"
Set Test=Form1
End Function

Private Sub Command1_Click()
With Test
  .Caption="1"
  .Caption="2"
  .Caption="3"
End With
End Sub

如果是按照你的理论,那么就应该弹出三个MsgBox才对,但是实际上只弹出一个……

另外就是我经常使用如下语法:

With New Class1
  .....
End With

如果按照你的理论的话就会不停的创建新的实例了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-24 22:48:51 | 显示全部楼层
acme_pjz 发表于 2015-8-24 21:20
你好火星啊

那你来看看这个代码:

那如何解释我一楼的例子?

点评

这个例子需要解释吗 -_-||  发表于 2015-8-25 14:08
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-25 22:37:06 | 显示全部楼层
我知道了,不能 with 一个 null 对象
回复 支持 反对

使用道具 举报

发表于 2015-8-26 00:24:36 | 显示全部楼层
with 是可执行的。。

前几天碰到VB未知异常。。调试后发现 执行到 with 一个控件的公有类对象 时直接崩了。。
回复 支持 反对

使用道具 举报

发表于 2015-8-29 00:17:18 | 显示全部楼层
那不是执行,而是VB的斟错功能,检测到了with块中语句的错误。只限调用对象类的情况。

点评

这是偷换概念,关键还是那个=  发表于 2015-8-30 15:56
确实是执行,不信运行我二楼的代码看看  发表于 2015-8-30 11:02
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-1 21:21

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表