5

Autocad Plugin使用して正常に動作する をWindows Forms 作成しuser control (winforms)ており、将来好きな形で複製する を作成しました。

質問は

コントロールのコードから、そのコントロールを実行しているアプリケーションのインスタンスを取得するにはどうすればよいですか?

(おそらく純粋な winforms の問題)

条件:

プラグイン内で、問題なく Autocad アプリケーション インスタンスを取得できます。

このユーザー コントロールはseparate assembly (dll)、プラグイン アプリケーションで参照されるようになっているため、アプリケーション インスタンスに直接アクセスすることはできません。


シナリオについての簡単な説明:

Main AssemblyプラグインとしてAutocadによって実行されています。そのアセンブリには、Autocad アプリケーションがインスタンス化されています。

これで、Autocad で作業するための便利なフォーム コントロールがいくつかあり、それらはseparate assembly. (それは、私が好きなだけ多くの異なるプラグインでそれらを使用したいからです)。

そのため、Autocad は を実行しmain assemblymain assemblyのコントロールを実行しますseparate assembly

適切に動作させるために、これらのコントロールは、main assembly.

今日、私はアプリケーションをコントロールのプロパティとして使用しています。コントロールを操作する前に設定する必要があります。(設定を忘れると、例外が発生します)。作成者がパラメータを取るコントロールを持つことはできないので。

コントロールが実行中のアプリケーションを検出するようにしたいので、その回避策を避けます。

4

1 に答える 1

2

次のコードを参照してください

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());

    }
}

これが既にわかっている場合は、コードの具体的などこに問題があるかを理解するのに役立つサンプル コードを貼り付ける必要があるかもしれません。これは、私が AutoCAD アプリケーションと Windows Forms アプリケーションを使用した方法です。WPFアプリケーションを取得したくない場合は、使用できます

var application = System.Windows.Application.Current;
于 2013-05-09T03:45:12.220 に答える