• Industries
  • Products
  • Buy
  • Services & Support
  • Communities
  • Discussion Groups

    .NET

    Reply
    Active Contributor
    MGO_MKD
    Posts: 29
    Registered: ‎06-23-2011

    Instance Forms in several drawings

    95 Views, 4 Replies
    04-24-2012 01:49 AM

    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?

    Please use plain text.
    *Expert Elite*
    Posts: 6,415
    Registered: ‎06-29-2007

    Re: Instance Forms in several drawings

    04-24-2012 02:54 AM in reply to: MGO_MKD

    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
    -------------------------------------------------------------------------
    Please use plain text.
    Active Contributor
    MGO_MKD
    Posts: 29
    Registered: ‎06-23-2011

    Re: Instance Forms in several drawings

    04-24-2012 03:34 AM 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

     

     

    Please use plain text.
    *Expert Elite*
    Posts: 6,415
    Registered: ‎06-29-2007

    Re: Instance Forms in several drawings

    04-24-2012 03:37 AM in reply to: MGO_MKD

    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
    -------------------------------------------------------------------------
    Please use plain text.
    Active Contributor
    MGO_MKD
    Posts: 29
    Registered: ‎06-23-2011

    Re: Instance Forms in several drawings

    04-24-2012 06:17 AM 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

     

     

    Please use plain text.