Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 自定义UserControl添加到父UC时会生成公共语言运行时错误_Wpf_Controls_Autocad - Fatal编程技术网

Wpf 自定义UserControl添加到父UC时会生成公共语言运行时错误

Wpf 自定义UserControl添加到父UC时会生成公共语言运行时错误,wpf,controls,autocad,Wpf,Controls,Autocad,简介: 我正在尝试创建一个自定义控件,以便通过autocad.net API在autocad中使用 我已经创建了UC的基本设计,并决定将其中的一些元素组合到自定义UC中,稍后将其称为主UC。(主要用于代码管理、组织……给我留下了如下代码结构: UC(顶部)-由几个自定义子UCs组成 每个子UCs由几个按钮和组合框组成 简单到目前为止 在这些子UCs中,我调用一个简单的ACAD方法/对象 当我尝试将其中一个子UCs添加到主UC时,问题出现了。 我得到一个“CLR错误”(附加图像) 我尝试了几种解

简介: 我正在尝试创建一个自定义控件,以便通过autocad.net API在autocad中使用

我已经创建了UC的基本设计,并决定将其中的一些元素组合到自定义UC中,稍后将其称为主UC。(主要用于代码管理、组织……给我留下了如下代码结构:

UC(顶部)-由几个自定义子UCs组成 每个子UCs由几个按钮和组合框组成

简单到目前为止

在这些子UCs中,我调用一个简单的ACAD方法/对象

当我尝试将其中一个子UCs添加到主UC时,问题出现了。 我得到一个“CLR错误”(附加图像)

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

基本上,我学到的是,如果我从用户创建的事件中运行代码(如按钮单击,…),我可以(以某种方式)让程序工作,但如果我尝试从UC构造函数中调用acad命令,或UC_Load event方法,当我尝试添加子UC时,我最终会得到CLR错误(通过VSdesigner,如果我通过代码添加它,那么当我尝试调用设计器时,最终会引发错误)

如果没有其他问题,我想知道为什么代码的行为会有所不同,这取决于代码是从“UC_加载”还是“单击按钮”调用的

这是我的密码:

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;
    }
}
“文档doc=…..是生成错误的行

这是错误的图像和解决方案。 当我将子对象klik到设计器中时,或者在我从代码中添加“子对象”后打开设计器之前,会出现此错误


使用C#acad 2017、VS2015、x64,这是在您创建表单时发生的,对吗

<>这可能发生在VS试图加载对象(在您的情况下是AutoCAD文档对象),这是不可能的,但也可能发生在VS为32和AutoCAD引用为64的情况下。考虑使用ObjectARX SDK中的AutoCAD引用,因为这些DLL只是方法存根。
我建议(作为最佳实践)不要在表单中使用AutoCAD对象,而是将UI和biz逻辑分开。UI和biz逻辑分开意味着,至少有一个纯粹基于UI组件的类(例如Windows.form命名空间),另一个实现实际AutoCAD命令的类(即AcMgd.dll和acoremgd.dll对象)以及最后一个数据层(即AcDbMgd.dll对象)

我从来没有进入编译部分,-在将一个UC添加到另一个UC时会发生错误。重点是将主UC添加到acads GUI,该GUI只接受UCs。注意,当所有元素都只在一个UC内时,一切都可以工作,这并不是很有趣的(Acad api代码和UC逻辑)。但在我决定将代码分为几个“子UCs”的那一刻,出现了错误。就像VS希望所有自定义UCs内部都有集成逻辑一样,当将它们添加到另一个UC时,他发现了“松散的末端”,他不喜欢。你能详细说明一下“单独的UI和业务逻辑”是什么意思吗"?是否要将其添加到选项板集中?我建议将UI和biz逻辑分开,这仍然适用,并允许您在命令行上重新使用您的逻辑,例如。我正在将其添加到PS中。我编辑了前面的注释。我尝试将acad部分分离到一个单独的类中,但当我从该类/对象调用方法时,仍然会得到一个error,当在UC构造函数或UC_加载中调用它时。我不确定你所说的“分离UI和业务”是什么意思.你的意思是说只需要单独的类,或者将biz部分预编译到dll,或者使用sendstring执行,或者是我没有考虑过的第三个方法吗?我编辑了reply.VS,因为它试图实例化Document对象,这是不可能的。我尝试过尽可能干净地创建程序(分离类等),并有两个我想尝试的概念,-通过参数UC(文档文档)传递文档文档