找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1879|回复: 7

[求助]:怎样判断一个选择集是否存在啊

[复制链接]
发表于 2005-7-8 17:25:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Dim sset As AcadSelectionSet
‘在添加以前加个判断语句,看test是否存在
(1)
      Set sset = acadApp.ActiveDocument.SelectionSets.Add("test")
      sset.SelectOnScreen
      If IsNull(acadApp.ActiveDocument.SelectionSets.item("test")) Then Exit Sub
          Set frm_chamfer_objcs.sset = sset
      frm_chamfer_objcs.Show
(2)
acadApp.ActiveDocument.SelectionSets("test").Delete加在(2)的位置,frm_chamfer_objcs.sset 的窗体中的选择集变成nothing了
加在(1)那位置呢,第一次执行会出错,以后就好了

最好是有个语名判断选择集是否存在
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-7-10 12:00:04 | 显示全部楼层
我的方法是加一个on error语句处理一下就可以不怕第一次出错的问题了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-11 09:18:03 | 显示全部楼层
选择集有Bug,使用前必须调用Delete方法删除掉

不需判断选择集是否存在

直接这样就可以了:

on error resume next

ThisDrawing.SelectionSets("test").delete

set ss=ThisDrawing.SelectionSets.add("test")

可以看看这里:
http://p4.xdcad.net/forum/showthread.php?s=&threadid=294720
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-29 22:55:47 | 显示全部楼层
For k = 0 To DwgDoc.SelectionSets.Count - 1
        If DwgDoc.SelectionSets.Item(k).Name = "test" Then
            DwgDoc.SelectionSets.Item(k).Delete
            Exit For
        End If
    Next k
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-4 15:15:25 | 显示全部楼层
标准答案:
Set pSelects = ThisDrawing.SelectionSets
    If Not IsNull(pSelects.Item("test")) Then
        Set pSelect = pSelects.Item("test")
        pSelect.Delete
    End If

    Set pSelect = ThisDrawing.SelectionSets.Add("test")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-8-28 14:39:59 | 显示全部楼层
楼上的答案不对吧:
IsNull只能判断选择集是否为空,但是空的选择集并不表示他不存在。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-2 11:41:24 | 显示全部楼层
楼上的标准答案确实有错,楼主可以自己去试!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-7 17:17:58 | 显示全部楼层
现综合一下,我比较一下这3种方法[遍历法、试探法、硬删法]:

===1===


'///
'/// Check if the selection is exist
'/// retVal:Boolean

Function selectionExist(selectionName As String) As Boolean
    selectionExist = False
    Dim elem As Object
    For Each elem In ThisDrawing.SelectionSets
        If UCase(elem.Name) = UCase(selectionName) Then
            selectionExist = True
            Exit For
        End If
    Next
End Function

'///缺点是:循环次数多,浪费CPU时间。在选择集成员不多时可用[我想在50个
'///成员以下时,几乎看不到什么因为循环而造成的延迟];


===2===
'///jxfzcgh所说的'标准方法'

'
Set pSelects = ThisDrawing.SelectionSets
If Not IsNull(pSelects.Item("test")) Then
Set pSelect = pSelects.Item("test")
pSelect.Delete
End If

Set pSelect = ThisDrawing.SelectionSets.Add("test") 



'///其致命伤是:当选择集'test'存在时,程序能顺利执行;但是第一次运行时,一般情况下
'///'test'这个选择集是不存在的,这时因为pSelects对象里是没有这个组员的,
'///进行pSelects.Item("test")调用时会出错:'Key not found' 找不到关键字!!!
'///这个错误是正常的。

===3===
'///斑主的方法,快刀斩乱麻!!!不管存在不存在,都删掉;
'///当它不存在时会出错,这时加上on error resume就行了。
'///这种方法简易,但是缺点是:如果该选择集里面的组员信息是有用的,就不行了。



on error resume next

Err.Clear
ThisDrawing.SelectionSets("test").delete
If Err Then Err.Clear

set ss=ThisDrawing.SelectionSets.add("test")




'///
'///所以推荐第一个和第三个方法,原则是看你是否要保留test选择集本身组员信息、以及选择集的组员数量是否很多;
'///目前我一直在用第一种方法。
'///
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-23 09:51 , Processed in 0.365649 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表