.NET
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Instance Forms in several drawings

4 REPLIES 4
Reply
Message 1 of 5
MGOMKD
453 Views, 4 Replies

Instance Forms in several drawings

Hi All,

 

I'had just met another matter for my Add-on. I noticed that when I instance a new drawing, while a first one is opened, when I load a new Form, this one keep all first drawing's properties. What could happen? 

 

For example, I would like to add the layer list on a ComboBox.

 

My source:

 

Private Sub LayerBox_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '***************************'
        '* Initialisation LayerBox *'
        '***************************'       
              
        Using acTrans = acCurDb.TransactionManager.StartTransaction()
            acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, OpenMode.ForRead)
            For Each acObjId As ObjectId In acLyrTbl
                acLyrTblRec = acTrans.GetObject(acObjId, OpenMode.ForRead)
                ComboBox1.Items.Add(acLyrTblRec.Name)
            Next acObjId
        End Using        

    End Sub

 This source works, but if i instance a new form on a new drawing, the first drawing's layer list is kept and the new layer list on the second drawing is ignored!

 

Any ideas?

4 REPLIES 4
Message 2 of 5
Alfred.NESWADBA
in reply to: MGOMKD

Hi,

 

>> but if i instance a new form on a new drawing

then you have to set your variable acCurDb to this other drawing before getting the list of layers.

 

- alfred -

------------------------------------------------------------------------------------
Alfred NESWADBA
Ingenieur Studio HOLLAUS ... www.hollaus.at ... blog.hollaus.at ... CDay 2024
------------------------------------------------------------------------------------
(not an Autodesk consultant)
Message 3 of 5
MGOMKD
in reply to: Alfred.NESWADBA

Hi alfred,

 

How can i set my variable acCurDb to each drawing

 

I set my variables like that (as it's explained on autoCAD Developper's Guide)

 

 Public acDoc As Document = Application.DocumentManager.MdiActiveDocument
 Public acCurDb As Database = acDoc.Database

 

Thank You

 

 

Message 4 of 5
Alfred.NESWADBA
in reply to: MGOMKD

Hi,

 

you have the DocumentCollection within the ApplicationServices.Application, that is a list of all opened Documents, run through this list and you have all Documents.

 

Next step is then to watch events for Opening/Activating/Closing Documents as you have then to update your list.

 

- alfred -

------------------------------------------------------------------------------------
Alfred NESWADBA
Ingenieur Studio HOLLAUS ... www.hollaus.at ... blog.hollaus.at ... CDay 2024
------------------------------------------------------------------------------------
(not an Autodesk consultant)
Message 5 of 5
MGOMKD
in reply to: Alfred.NESWADBA

Hi alfred,

 

I've found the source and it works! Thanks you.

 

In starter Sub just add an Event Argument to detect document activation.

 

Private Sub LayerBox_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        AddHandler Application.DocumentManager.DocumentActivated, AddressOf docColDocAct

End Sub

 Then, when a document is activated the Event Argument refers to docColDocAct which reset acCurDb variable with the current document activated and return it to private Sub LayerBox_Load.

Public Sub docColDocAct(ByVal senderObj As Object, ByVal docColDocActEvtArgs As DocumentCollectionEventArgs)

        acCurDb = docColDocActEvtArgs.Document.Database

End Sub

 

Thank you alfred

 

 

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Autodesk Design & Make Report

”Boost