2013-05-03 19 views
5

sto facendo un Autocad Plugin che funziona bene con Windows Forms E ho creato una user control (winforms) di replicare in qualsiasi forma mi piace in futuro.Ottenere applicazione che esegue un controllo di Windows Form

La domanda è

Dal codice del controllo, come faccio ad ottenere l'istanza dell'applicazione in esecuzione che il controllo?

(Probabilmente un puro problema WinForms)

coditions:

all'interno del plug-in posso ottenere l'istanza Autocad Application senza problema.

Questo controllo utente vuole essere in un separate assembly (dll) da riferimento nella applicazione plug-in, quindi ha accesso diretto alla istanza dell'applicazione.


Una piccola spiegazione sullo scenario:

C'è un Main Assembly gestito da Autocad come plug-in. Questo assembly ha l'istanza di Autocad istanziata.

Ora ho alcuni controlli di form utili per lavorare con Autocad, e sono in un separate assembly. (Questo perché voglio usarli in tanti plug-in che mi piacciono).

Quindi, Autocad esegue main assembly e main assembly esegue controlli dello separate assembly.

Per funzionare correttamente, tali controlli devono avere accesso all'applicazione Autocad che sta eseguendo il main assembly.

Oggi utilizzo l'applicazione come proprietà nei controlli, che devo impostare prima di utilizzarli. (Se dimentico di impostarlo, vengono sollevate delle eccezioni). Dal momento che non posso avere un controllo con un creatore che prende i parametri.

Desidero che i controlli rilevi l'applicazione in esecuzione, pertanto evito questa soluzione alternativa.

+0

Non sono sicuro del motivo per cui si desidera l'istanza di Applicazione. Forse, se tu potessi spiegare il tuo scenario in breve, sarebbe utile. La classe System.Windows.Forms.Application espone metodi statici che potrebbero esserti di aiuto. In tal caso, dai un'occhiata a http://msdn.microsoft.com/en-us/library/system.windows.forms.application(v=vs.100).aspx – Jatin

+0

Là va, ha aggiunto lo scenario. –

+0

Non credo che Autocad api ti dia accesso all'oggetto dell'applicazione Windows sottostante. Ho dovuto affrontare un problema simile durante lo sviluppo di un'applicazione wpf. Ho finito per creare un'applicazione come mostrato in questo post: http://stackoverflow.com/questions/13658711/caliburn-micro-in-no-application-object-mode-like-in-autocad-dll-plugin. Se i tuoi schermi non interagiscono con le schermate di AutoCAD, puoi provare un approccio simile. – Jatin

risposta

2

Vedere il seguente codice di

public class MyCommands { 

    [CommandMethod("NS", "TEST", "TEST", CommandFlags.Modal)] 
    public void TestCommand() // This method can have any name 
    { 
     Form fromAutoCADAPI = new TestForm(); 
     Form independent1 = new TestForm(); 
     Form independent2 = new TestForm(); 

     //Using AutoCAD application 
     Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(fromAutoCADAPI); 

     independent1.Show(); 
     independent2.Show(); 

     //Using Windows Forms Application 
     var count = System.Windows.Forms.Application.OpenForms.Count; //should be 3 

     Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(count.ToString()); 

    } 
} 

Se questo è ciò che si conosce già, allora può essere che si dovrebbe incollare alcuni esempi di codice che vi aiuterà a capire dove specificamente si sono bloccati nel codice. Questo è il modo in cui ho usato l'applicazione AutoCAD e l'applicazione Windows Form. Nel caso in cui non si desideri utilizzare l'applicazione WPF, è possibile utilizzare

var application = System.Windows.Application.Current; 
+0

Diciamo che 'TestForm' è dichiarato in un assembly esterno (dll), che non è l'assembly di questo plugin. E TestForm ha bisogno di usare l'istanza "Autodesk .... Application". Potrei, da questo codice che hai mostrato, creare qualcosa come 'independent1.AcadApp = AcadAppInstance'. Ok –

+0

Ma, quello che voglio è TestForm 'stesso' per scoprire l'applicazione. Intendo "dal codice TestForm". Quindi, sarebbe come un 'independent1.GetAcadApplicationRunningMe()'. Ovviamente sarebbe usato internamente, perché esternamente posso facilmente prendere l'applicazione. –

+0

Non posso testare ora, ma ci penserò dopo. Posso usare quel 'System.Windows.Forms.Application' da dentro un' UserControl'? Si noti che non ho un'applicazione Winforms esplicita. Ho solo due librerie. Uno è il plug-in, che chiama l'altro contenente i controlli. –

Problemi correlati