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 assembly并main assembly运行控件separate assembly.
为了正常工作,这些控件需要访问正在运行的Autocad应用程序main assembly.
今天我使用应用程序作为控件中的属性,我必须在使用它们之前设置它.(如果我忘记设置,则会引发异常).因为我无法控制创建者参加参赛者.
我希望控件检测其正在运行的应用程序,以便我避免这种解决方法.
请看下面的代码
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)
| 归档时间: |
|
| 查看次数: |
2306 次 |
| 最近记录: |