请教for each不是集合类型的问题

arttk 2011-11-04 09:50:18
Dim app As PCDLRN.Application
Dim cmds As PCDLRN.Commands
Dim cmd As PCDLRN.Command
Dim part As PCDLRN.PartProgram

app = CreateObject("PCDLRN.Application")
part = app.ActivePartProgram
cmds = part.Commands

For Each cmd In cmds

以上中,cmds错误为“表达的类型为PCDLRN.Commands,该类型不是集合类型。”
但是在VB里面是可以通过的
以上代码为一个测量软件的二次开发接口接入,遍历零件程式中的命令集合
在类型库中,commands的声明为Public Property Commands() As Commands

在网上查了,有人说在VB6里面,集合类型有一个默认属性,就是因为调用了默认属性,才不会出错,但VB.net没有默认属性,所以会出错。那么,我想问一下,怎样得到这个commands的默认属性?

以上请帮忙!
如果要这个软件的引用文件pcdlrn.tlb文件,可以联系QQ859027136或者859027136@qq.com
感谢了!
...全文
149 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
arttk 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hztltgg 的回复:]
这个没有手册一类的东西吗?item我是猜的,你看看count等于多少,很奇怪为什么item放一个nothing,如果commands是没有命令的话,count应该是0才对呀
[/Quote]非常感谢你的帮助,果然像你所说的,count不是从0开始,而是从1开始,以下代码可以通过了,再次感谢!
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim pcapp As PCDLRN.Application
Dim pcpart As PCDLRN.PartProgram
Dim pccmds As PCDLRN.Commands
Dim pccmd As PCDLRN.Command
pcapp = CreateObject("pcdlrn.application")
pcpart = pcapp.ActivePartProgram
pccmds = pcpart.Commands
For ii = 1 To pccmds.Count
pccmd = pccmds.Item(ii)
If pccmd.IsDimension Then
If pccmd.Type = PCDLRN.OBTYPE.DIMENSION_START_LOCATION Then
ListBox1.Items.Add(pccmd.GetText(PCDLRN.ENUM_FIELD_TYPES.REF_ID, 1))
End If
End If
Next
End Sub
arttk 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hztltgg 的回复:]
这个没有手册一类的东西吗?item我是猜的,你看看count等于多少,很奇怪为什么item放一个nothing,如果commands是没有命令的话,count应该是0才对呀
[/Quote]有手册,但上传到“我的资源”里面,它不显示出来,方便留一个联系方式吗,我发给你!谢谢你的帮助!
arttk 2011-11-04
  • 打赏
  • 举报
回复
引用库的文件已经上传了,欢迎下载并指点,谢谢!
附件:http://dl5.csdn.net/fd.php?i=659337541294143&s=e39af268a4309158c3bd16a3a28615be
arttk 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hztltgg 的回复:]
右键点Commands,转到定义,看一下这个到底是什么类型
[/Quote]留个联系方式,我把引用库文件发给你,你帮我看看好吗?谢谢!
hztltgg 2011-11-04
  • 打赏
  • 举报
回复
右键点Commands,转到定义,看一下这个到底是什么类型
hztltgg 2011-11-04
  • 打赏
  • 举报
回复
这个没有手册一类的东西吗?item我是猜的,你看看count等于多少,很奇怪为什么item放一个nothing,如果commands是没有命令的话,count应该是0才对呀
arttk 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hztltgg 的回复:]
item是取单个内容的呀,不过这个还是要看说明了,我这儿也是猜

for i=0 to cmds.count-1

cmd= cmds.item(i)
...
...

next
[/Quote]高手,不行呀,看图
hztltgg 2011-11-04
  • 打赏
  • 举报
回复
item是取单个内容的呀,不过这个还是要看说明了,我这儿也是猜

for i=0 to cmds.count-1

cmd= cmds.item(i)
...
...

next



arttk 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hztltgg 的回复:]
看了一下,这个类库的设计不是很符合.net里关于集合的设计理念。



Item一般是用作为默认属性,是一个集合的,但你这儿是一个方法,只返回command,所以不能遍历,看你上面有个count属性,但是integer的,不知道和item的参数是不是一致,一致的话,用for i=0 to count-1来循环也可以。
[/Quote]高手,我想用 for each cmd in part.commands 不知道行不行呢?因为好像pcdlrn.partprogram.commands的类型为commands,我现在的电脑上没有vb.net ,要在家里才能试一下
arttk 2011-11-04
  • 打赏
  • 举报
回复
上个本软件的图,左边命令窗口有四个点(pnt1~pnt4),从右边CAD模型窗口可以看出,现在我就想遍历命令窗口里的每一个点,所以用VB6是for each cmd in cmds是可以通过的,但是在VB.net就不能通过,用4楼的方法for i=0 to count-1,这好像是从0到命令总数的遍历次数,但好像不能获得里面单个命令的内容,比如说我要或得pnt1的X值
http://hi.csdn.net/attachment/201111/4/5606929_13203934674kuy.jpg
arttk 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hztltgg 的回复:]
看了一下,这个类库的设计不是很符合.net里关于集合的设计理念。



Item一般是用作为默认属性,是一个集合的,但你这儿是一个方法,只返回command,所以不能遍历,看你上面有个count属性,但是integer的,不知道和item的参数是不是一致,一致的话,用for i=0 to count-1来循环也可以。
[/Quote]那可不可以把commands增加一个属性,让它成为command的集合呢?我刚开始学,还有很多不明白,请对我这种小白问题见谅,呵呵
非常感谢你的帮助!
hztltgg 2011-11-04
  • 打赏
  • 举报
回复
看了一下,这个类库的设计不是很符合.net里关于集合的设计理念。



Item一般是用作为默认属性,是一个集合的,但你这儿是一个方法,只返回command,所以不能遍历,看你上面有个count属性,但是integer的,不知道和item的参数是不是一致,一致的话,用for i=0 to count-1来循环也可以。

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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