【发布时间】:2016-07-15 16:14:49
【问题描述】:
简介: 我正在尝试通过 autocad .net API 创建一个在 AutoCAD 中使用的自定义控件。
我已经创建了 UC 的基本设计,并决定将它的一些元素分组到自定义 UC 中,然后将其调用到主 UC。 (基本上是用于代码管理、组织......给我留下这样的代码结构:
UC(top) - 由几个自定义子 UC 组成 每个子 UC 都由几个按钮和组合框组成。
到目前为止很简单......
在那些子 UC 中,我调用了一个简单的 ACAD 方法/对象。
当我尝试将这些子 UC 之一添加到主 UC 时出现问题。 我收到“CLR 错误”(附加图片)。
https://s32.postimg.org/6gnt3sgz9/why_no_work.jpg
我尝试了几种解决问题的方法; 1) 使用自定义控件而不是 UC 2)试图清除解决方案,重建解决方案。 3) 尝试创建一个单独的类,从 UC 代码外部调用 ACAD 方法
基本上,我学到的是,如果我从用户创建的事件(例如按钮单击,...)中运行代码,我可以(以某种方式)让程序工作,但如果我尝试调用 acad来自 UC 构造函数或 UC_Load 事件方法中的命令,当我尝试添加 childUC 时,我最终会收到 CLR 错误(通过 VSdesigner,如果我通过代码添加它,当我尝试调用设计器时,我最终会引发错误)
如果不出意外,我想知道为什么代码的行为会有所不同,具体取决于代码是从“UC_load”还是“button_clicked”调用的。
这是我的代码:
public partial class child : UserControl
{
public child()
{
InitializeComponent();
//if I initialize doc here, I get the error
}
private void child_Load(object sender, EventArgs e)
{
//if I initialize doc here, I get the error
}
private void button1_Click(object sender, EventArgs e)
{
//it works here, but Im unsure why
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
}
}
"Document doc =..... 是产生错误的那一行;
这是错误的图像和解决方案。 当我将子对象单击到设计器时,或者在我从代码中添加“子对象”之后打开设计器之前,会出现错误。
使用 C# acad 2017、VS2015、x64
【问题讨论】: