我正在为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特定的其他帮助。
希望这足以提供一些背景信息。预先感谢。
答案 0 :(得分:0)
问题是我没有在足够高的范围内创建按钮定义。我需要在Activate()
方法范围之外创建一个变量,以便应用程序可以在需要时看到它。