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.
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!
>> 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 -
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
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 -
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
Access a broad range of knowledge to help get the most out of your products and services.
Start with some of our most frequented solutions or visit the Installation and Licensing Forum to get help installing your software.
Upgrading to a 2015 product? Make sure to check these out 1st!