这门课怎么了???
我正在编写一个应用程序来收集块的属性 ;我有一个名为AttInf的简单类(见下文) ;在一个表单模块中,我有一个过程来查找插入,并将每个属性添加到另一个类实例中,该实例只不过是AttInf实例的集合(请参阅下面的类属性)I期';m在Attributes类中使用Add方法 ;循环遍历属性的例程工作正常,每次都用正确的参数调用attributes类的Add方法 ;然而,当我进入Add方法时,atts集合中的每个attinf都具有作为Add方法的参数发送的attinf的属性 ;我不知道';我不知道这是怎么发生的,也不知道该怎么解决这个问题
非常感谢您的建议
迈克·韦弗Option Explicit
Public TagString As String
Public Value As String
Public Handle As String
'Simple enough?
调用过程For Each objTarget In objPSpace
If objTarget.ObjectName = "AcDbBlockReference" Then
If (objTarget.Name = InsertName) And (objTarget.HasAttributes = True) Then
Dim Atts As Variant
Atts = objTarget.GetAttributes
Dim i As Integer
For i = LBound(Atts) To UBound(Atts)
Set ThisAtt = Atts(i)
attThis.TagString = ThisAtt.TagString
attThis.Value = ThisAtt.TextString
attThis.Handle = ThisAtt.Handle
Attribs.Add attThis '<<<<<<<<<<<<<<<---------------------<<<This is where I'm having the problem
Next i
GetAttributeInfo.PathName = PathName
GetAttributeInfo.Attribs = Attribs
Exit Function
End If
End If
Next objTarget 类属性Option Explicit
Private Atts As collection
Private Sub Class_Initialize()
Set Atts = New collection
End Sub
Private Sub Class_Terminate()
Set Atts = Nothing
End Sub
...
Public Sub Add(AttNew As AttInf)
Dim i As Integer
For i = 1 To Atts.Count
If Atts.Item(i).TagString = AttNew.TagString And Atts.Item(i).Handle = AttNew.Handle Then
Atts.Item(i).Value = AttNew.Value
Else
Atts.Add AttNew
Exit Sub
End If
Next i
Atts.Add AttNew
End Sub
这可能会有帮助…… If objOldBlk.HasAttributes Then
varOldAtt = objOldBlk.GetAttributes 'get old block attributes
End If
For intOldCnt = LBound(varOldAtt) To UBound(varOldAtt)
Set objOldAttRef = varOldAtt(intOldCnt)
Next intOldCnt
...................................
Set objNewBlk = ThisDrawing.ModelSpace.InsertBlock(InsertPt, NewBlkName, xScale, yScale, zScale, Rot) 'insert new tblock
varNewAtt = objNewBlk.GetAttributes 'get attributes
For intOldCnt = LBound(varOldAtt) To UBound(varOldAtt)
For intNewCnt = LBound(varNewAtt) To UBound(varNewAtt)
If varNewAtt(intNewCnt).TagString = varOldAtt(intOldCnt).TagString Then
varNewAtt(intNewCnt).TextString = varOldAtt(intOldCnt).TextString
End If
Next
Next
这从旧标题栏中获取属性值,替换块,然后替换属性值。。 在一位同事的帮助下,我发现了以下几点 ;调用Attributes类的add方法的例程在循环外实例化,然后每次通过循环进行修改,为其提供当前属性的值 ;我的add方法是获取这个AttInf实例并将其添加到我的集合中 ;问题是,它每次都会向相同的AttInf添加一个引用,该引用在循环中每次都会更改 ;因此,我的收藏只是对同一观点的引用的集合 ;嗯
我现在可以解决我的问题了
迈克·韦弗
页:
[1]