添加到父UC

时间:2016-07-15 16:14:49

标签: wpf controls autocad

介绍: 我试图通过autocad .net API创建一个在autocad中使用的自定义控件。

我已经创建了UC的基本设计,并决定将其中的一些元素组合在一个自定义UC中,稍后将其称为主UC。 (基本上是代码管理,组织......让我有这样的代码结构:

UC(顶部) - 由少数定制儿童UC组成 这些子UC中的每一个都包含几个按钮和组合框。

到目前为止很简单......

在那些子UC中,我调用了一个简单的ACAD方法/对象。

当我尝试将其中一个子UC添加到主UC时出现问题。 我得到了一个" CLR错误" (附上图片)。

https://s32.postimg.org/6gnt3sgz9/why_no_work.jpg

我尝试过几种解决问题的方法; 1)使用自定义控件而不是UC 2)试图清除解决方案,重建解决方案。 3)尝试创建一个单独的类,从UC代码外部调用ACAD方法

基本上,我所学到的是,如果我从用户创建的事件(例如按钮点击,...)中运行代码,我可以(某种方式)让程序运行,但是如果我尝试从UC构造函数中调用acad命令,或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

1 个答案:

答案 0 :(得分:2)

在您创建表单时是否会发生这种情况,对吧?

这可能发生在VS尝试加载对象(在您的情况下是AutoCAD Document对象)时,这是不可能的,但也可能发生在VS为32且AutoCAD引用为64时。请考虑使用来自ObjectARX SDK,因为这些DLL只是方法存根。

我建议(作为最佳做法)不要在表单中使用AutoCAD对象,而是将UI和biz逻辑分开。 UI和商业逻辑的分离至少有一个纯粹基于UI组件的类(例如Windows.Form命名空间),另一个实现实际AutoCAD命令的类(即AcMgd.dll& AcCoreMgd.dll对象)和最后,数据层(即AcDbMgd.dll对象)