Я создаю надстройку для 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, и мне понадобится другая помощь.
Надеюсь, этого достаточно, чтобы дать некоторый контекст. Заранее спасибо.