5

我正在制作一个Autocad Plugin运行良好的程序Windows Forms 并且我已经创建了一个user control (winforms)可以在将来以我喜欢的任何形式进行复制。

问题是

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

(可能是纯粹的winforms问题)

代码:

在插件中,我可以毫无问题地获得 Autocad 应用程序实例。

此用户控件旨在separate assembly (dll)在插件应用程序中被引用,因此它无法直接访问应用程序实例。


关于场景的一点解释:

Autocad 有一个Main Assembly作为插件运行的。该程序集已实例化 Autocad 应用程序。

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

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

为了正常工作,这些控件需要能够访问运行main assembly.

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

我希望控件检测它们正在运行的应用程序,因此我避免了这种解决方法。

4

1 回答 1

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

    }
}

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

var application = System.Windows.Application.Current;
于 2013-05-09T03:45:12.220 回答