获取运行Windows窗体控件的应用程序

Dan*_*ler 5 c# winforms autocad-plugin

我正在制作一个Autocad Plugin运行良好的使用Windows Forms 而且我创建了一个user control (winforms)以我喜欢的任何形式复制.

问题是

从控件的代码中,我如何获得运行该控件的应用程序实例?

(可能是纯粹的winforms问题)

Coditions:

在插件中,我可以毫无问题地获得Autocad Application实例.

此用户控件意味着要在separate assembly (dll)插件应用程序中引用,因此它无法直接访问应用程序实例.


关于场景的一点解释:

有一个Main Assembly由Autocad作为插件运行.该程序集实例化了Autocad应用程序.

现在我有一些有用的表单控件来使用Autocad,它们在一个separate assembly.(那是因为我想在我喜欢的许多不同的插件中使用它们).

因此,Autocad运行main assemblymain assembly运行控件separate assembly.

为了正常工作,这些控件需要访问正在运行的Autocad应用程序main assembly.

今天我使用应用程序作为控件中的属性,我必须在使用它们之前设置它.(如果我忘记设置,则会引发异常).因为我无法控制创建者参加参赛者.

我希望控件检测其正在运行的应用程序,以便我避免这种解决方法.

Jat*_*tin 2

请看下面的代码

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());

    }
}
Run Code Online (Sandbox Code Playgroud)

如果这是您已经知道的,那么您可能应该粘贴一些示例代码,这将有助于了解您在代码中具体陷入困境的位置。这是我使用 AutoCAD 应用程序和 Windows 窗体应用程序的方式。如果你不想获取 WPF 应用程序,那么你可以使用

var application = System.Windows.Application.Current;
Run Code Online (Sandbox Code Playgroud)