Autodesk Inventor加载项中的方法,委托和事件订阅帮助

时间:2018-11-27 22:13:27

标签: c# autodesk-inventor

我正在为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特定的其他帮助。

希望这足以提供一些背景信息。预先感谢。

1 个答案:

答案 0 :(得分:0)

问题是我没有在足够高的范围内创建按钮定义。我需要在Activate()方法范围之外创建一个变量,以便应用程序可以在需要时看到它。