2016-07-15 10 views
1

intro: autocadから.net APIを使用してカスタムコントロールを作成しようとしています。カスタムUserControlは、親UCに追加するとCommon Language Runtimeエラーを生成します

私はUCの基本設計を作成し、それをカスタムUCにグループ化し、後でメインUCに呼び出すことにしました。 (基本的にはコード管理、組織...のために、このようなコード構造で私を残して:いくつかのカスタム子UCの いくつかのボタンからなるものを子供のUCSのそれぞれ、およびコンボボックスの

UC(上)-consisting

シンプル

はこれまで...これらの子UCの中

は、私は簡単なACADメソッド/オブジェクトを呼び出す。

私がメインUCにそれらの子のUCSの1を追加しようとすると問題が表示されます。 「CLRエラー」(画像が添付されている)が表示される

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

私はこの問題を解決する方法をいくつか試しました。 1)UC の代わりにカスタムコントロールを使用する2)ソリューションをクリアして、ソリューションを再構築しようとしました。 3)UCコードの外からACADメソッドを呼び出す別のクラスを作成しようとしました

基本的に、私が学んだのは、ユーザーからコードを実行すると私はUCコンストラクタ、またはUC_Loadイベントメソッド内からacadコマンドを呼び出そうとすると、私はchildAdUCを追加しようとするとCLRエラーを受け取ることになります(VSdesignerを介してコードで追加すると、デザイナーに電話してみるとエラーが発生します)

「UC_load」または「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; 
    } 
} 

「文書ドキュメント=エラー発生行であり、ここで

は誤差の画像、およびソリューションです :ここ

は私のコードです。エラーは、C#のACAD 2017を使用して

。私はデザイナーに、または私はコードから「子オブジェクト」を追加した後にデザイナーを開く前に、子オブジェクトをklikたときに表示される、VS2015、x64の

答えて

2

フォームを作成している間、これは起こっていますか?

これはVSがオブジェクト(あなたのケースではAutoCAD Documentオブジェクト)を読み込もうとしたときに起こる可能性がありますが、VSは32でAutoCADの参照は64であるため発生する可能性があります。これらのDLLは単なるメソッドスタブであるため、ObjectARX SDK。

フォーム内でAutoCADオブジェクトを使用せず、むしろUIとビジネスロジックを分離することをお勧めします。 UIとbizロジックの分離は、少なくとも、UIコンポーネント(Windows.Form名前空間など)、実際のAutoCADコマンド(AcMgd.dll & AcCoreMgd.dllオブジェクト)を実装するクラス、最後に、データ層(すなわち、AcDbMgd。DLLオブジェクト)

+0

私は決してパートをコンパイルすることはありません。別のUCを追加するときにエラーが発生します。要点は、すべての要素が1つのUC(Acad APIコードとUCロジック)の中にあるだけで、すべての機能が動作することに気づく興味深いものがある を形成しないUCだけを受け付けるacads GUIにメインUCを追加することです。しかし、現時点では、コードをいくつかの「サブUC」に分割することに決めました。エラーが表示されます。 そのようなVSは、すべてのカスタムUCがそれらの中に統合されたロジックを持つことを期待しています。そして、別のUCにそれらを追加するとき、彼は「緩い終わり」を見つけます。 「別のUIとbizロジック」の意味を詳しく説明できますか? –

+0

あなたはそれをPaletteSetに追加していますか? UIとビジネスロジックを分離するための私の提案はまだ適用され、コマンドラインでロジックを再利用できるようになります。例えば –

+1

です。私はPSに追加しています。私は前のコメントを編集しました。 Iveは別のクラスにacadパーツを分離しようとしましたが、そのクラス/オブジェクトからメソッドを呼び出すと、UCコンストラクタまたはUC_Loadで呼び出すときにエラーが発生します。 「UIとBizを分ける」という意味がわかりません。クラスを別々にするか、bizパーツをdllにプリコンパイルするか、sendstringを使用して実行するか、あるいは私が考えなかった3番目のメソッドを使用するだけですか? –

関連する問題