0

Autodesk Inventor 用のアドインを作成しています。基本的に、追加するボタンを定義し、アプリにボタン定義を追加するように指示します。私が抱えている問題は、ボタン定義の「OnExecute」メソッドを定義すると、ボタンが実行されないことです。コードを整理しようとしている方法が問題を引き起こしていると思います。

このようなデリゲート プロパティを持つ CustomButton クラスがあります (署名はNameValueMapインターフェイスの入力では無効です) 。

public class CustomButton
{
    // … properties and methods that don't matter here
    public ButtonDefinitionSink_OnExecuteEventHandler Execute { get; set; }
}

メインActivate()メソッド (Inventor の起動時に呼び出されるメソッド) では、次のクラスのインスタンスを作成して、すべてのボタン定義とクリック時に起動するメソッドを設定します。そのクラスは次のようになります。

public class CustomButtonDefinitions
{
    public CustomButtonDefinitions(ref Application app)
    {
        _inventorApp = app;
        InitializeButtonDefinitions();
    }

    public List<CustomButton> CustomButtons { get; set; } = new List<CustomButton>();

    private void InitializeButtonDefinitions()
    {
        AddTestButton();
    }
    private void AddTestButton()
    {
        var testButton = new CustomButton
        {
            DisplayName = "test",
            InternalName = "testCommand1",
            Ribbon = "Assembly",
            RibbonPanel = "Simplification",
            IconSource = "./Assets/test.jpg",
            Classification = CommandTypesEnum.kFileOperationsCmdType,
            ShowText = true,
            UseLargeIcon = true,
        };

        testButton.Execute = TestButton_Execute;
        CustomButtons.Add(testButton);
    }
    private void TestButton_Execute(NameValueMap Context)
    {
        // This is where the logic of the button would go.
        // For now, just something that gives me an indication it worked.
        System.Windows.Forms.MessageBox.Show("Hello");
        _inventorApp.ActiveDocument.Close();
    }
}

エラーの原因は次のコードにあると思います(これは次の場所にありますActivate()

CustomButtonDefinitions customButtonDefinitions = new CustomButtonDefinitions(ref _InventorApp);
foreach (var button in customButtonDefinitions.CustomButtons)
{
            // this creates the button in Inventor
    var buttonDef = button.CreateButtonDefinition(ref controlDefs);
    // and this subscribes the button click event to my method  
    buttonDef.OnExecute += button.Execute;
}

ボタンクリックイベントからメソッドのサブスクライブを解除する何かが必要です。

これは Inventor フォーラムにも投稿する予定ですが、デリゲートとイベント ハンドラは初めてなので、こちらもチェックしたいと思いました。デリゲート/イベントについて理解していないか、Inventor 固有のものであり、他のヘルプが必要です。

うまくいけば、これはいくつかのコンテキストを提供するのに十分です. 前もって感謝します。

4

1 に答える 1

0

問題は、十分に高いスコープでボタン定義を作成していなかったという事実です。メソッドのスコープの上に変数を作成して、Activate()必要なときにアプリが参照できるようにする必要がありました。

于 2018-11-27T23:07:46.440 に答える