乐筑天下

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

这个班有什么问题???

[复制链接]

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-5-24 10:35:55 | 显示全部楼层 |阅读模式
我正在编写一个应用程序来从块中收集属性。 我有一个名为AttInf的简单类(见下文)。 在表单模块中,我有一个过程来查找插入,并将每个属性添加到另一个类实例中,该类实例只不过是AttInf实例的集合(请参阅下面的类属性)。
我遇到的问题是属性类中的 Add 方法。 循环遍历属性的例程工作正常,每次都使用正确的参数调用 Attributes 类的 Add 方法。 但是,当我单步执行 Add 方法时,atts 集合中的每个 attinf 都采用作为 add 方法的参数发送的 attinf 的属性。 我不明白这是怎么发生的,也不明白该怎么做才能解决问题。
非常感谢您的建议。
Mike Weaver
Class AttInf
  1. Option Explicit
  2. Public TagString As String
  3. Public Value As String
  4. Public Handle As String
  5. 'Simple enough?

Calling Procedure
  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

Class Attributes
  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

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

16

主题

168

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 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 | 显示全部楼层
在一位同事的帮助下,我发现了以下几点。调用Attributes类的add方法的例程在循环外部实例化,然后每次通过循环进行修改,为其提供当前属性的值。我的add方法是将这个AttInf实例添加到我的集合中。问题在于,它每次都向同一个AttInf添加一个引用,该引用在循环中每次都会更改。因此,我的集合只是对同一个AttInf的引用的集合。嗯<我现在可以解决我的问题了<迈克·韦弗
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-7 19:00 , Processed in 0.623544 second(s), 59 queries .

© 2020-2025 乐筑天下

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