乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 40|回复: 2

这门课怎么了???

[复制链接]

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-5-24 10:35:55 | 显示全部楼层 |阅读模式
我正在编写一个应用程序来收集块的属性 我有一个名为AttInf的简单类(见下文) 在一个表单模块中,我有一个过程来查找插入,并将每个属性添加到另一个类实例中,该实例只不过是AttInf实例的集合(请参阅下面的类属性)
I期'm在Attributes类中使用Add方法 循环遍历属性的例程工作正常,每次都用正确的参数调用attributes类的Add方法 然而,当我进入Add方法时,atts集合中的每个attinf都具有作为Add方法的参数发送的attinf的属性 我不知道'我不知道这是怎么发生的,也不知道该怎么解决这个问题
非常感谢您的建议
迈克·韦弗
  1. Option Explicit
  2. Public TagString As String
  3. Public Value As String
  4. Public Handle As String
  5. 'Simple enough?
调用过程
  1.   For Each objTarget In objPSpace
  2.     If objTarget.ObjectName = "AcDbBlockReference" Then
  3.     If (objTarget.Name = InsertName) And (objTarget.HasAttributes = True) Then
  4.         
  5.         Dim Atts As Variant
  6.         Atts = objTarget.GetAttributes
  7.         Dim i As Integer
  8.         For i = LBound(Atts) To UBound(Atts)
  9.           Set ThisAtt = Atts(i)
  10.           attThis.TagString = ThisAtt.TagString
  11.           attThis.Value = ThisAtt.TextString
  12.           attThis.Handle = ThisAtt.Handle
  13.           Attribs.Add attThis '<<<<<<<<<<<<<<<---------------------<<<  This is where I'm having the problem
  14.         Next i
  15.         GetAttributeInfo.PathName = PathName
  16.         GetAttributeInfo.Attribs = Attribs
  17.         Exit Function
  18.         End If
  19.     End If
  20.   Next objTarget
类属性
  1. Option Explicit
  2. Private Atts As collection
  3. Private Sub Class_Initialize()
  4.   Set Atts = New collection
  5. End Sub
  6. Private Sub Class_Terminate()
  7.   Set Atts = Nothing
  8. End Sub
  9. ...
  10. Public Sub Add(AttNew As AttInf)
  11.   Dim i As Integer
  12.   For i = 1 To Atts.Count
  13.     If Atts.Item(i).TagString = AttNew.TagString And Atts.Item(i).Handle = AttNew.Handle Then
  14.     Atts.Item(i).Value = AttNew.Value
  15.     Else
  16.     Atts.Add AttNew
  17.     Exit Sub
  18.     End If
  19.   Next i
  20.   Atts.Add AttNew
  21. End Sub

回复

使用道具 举报

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-5-24 11:25:41 | 显示全部楼层
这可能会有帮助……
  1.     If objOldBlk.HasAttributes Then
  2.               varOldAtt = objOldBlk.GetAttributes     'get old block attributes
  3.             End If
  4.             For intOldCnt = LBound(varOldAtt) To UBound(varOldAtt)
  5.               Set objOldAttRef = varOldAtt(intOldCnt)
  6.             Next intOldCnt
  7. …...................................
  8.    Set objNewBlk = ThisDrawing.ModelSpace.InsertBlock(InsertPt, NewBlkName, xScale, yScale, zScale, Rot) 'insert new tblock
  9.       
  10.    varNewAtt = objNewBlk.GetAttributes 'get attributes
  11.    For intOldCnt = LBound(varOldAtt) To UBound(varOldAtt)
  12.        For intNewCnt = LBound(varNewAtt) To UBound(varNewAtt)
  13.             If varNewAtt(intNewCnt).TagString = varOldAtt(intOldCnt).TagString Then
  14.                 varNewAtt(intNewCnt).TextString = varOldAtt(intOldCnt).TextString
  15.             End If
  16.       Next
  17.    Next
这从旧标题栏中获取属性值,替换块,然后替换属性值。。
回复

使用道具 举报

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-5-24 16:35:56 | 显示全部楼层
在一位同事的帮助下,我发现了以下几点&nbsp;调用Attributes类的add方法的例程在循环外实例化,然后每次通过循环进行修改,为其提供当前属性的值&nbsp;我的add方法是获取这个AttInf实例并将其添加到我的集合中&nbsp;问题是,它每次都会向相同的AttInf添加一个引用,该引用在循环中每次都会更改&nbsp;因此,我的收藏只是对同一观点的引用的集合&nbsp;嗯
我现在可以解决我的问题了
迈克·韦弗
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-7 18:27 , Processed in 1.104285 second(s), 59 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表