We have to convert two COM registered command buttons to Add-in buttons.
When any button clicked, a message appears and both buttons should be disabled.
It worked "anonymously" in COM. In "COM" code we have
private static void DisableButtons(string progId, bool isEnabled)
UID pUID = new UID();
pUID.Value = progId;
ICommandItem pItem = ArcMap.Application.Document.CommandBars.Find(pUID, false, false);
IComponentAvailable pAvailable = pItem.Command as FirstButton.IComponentAvailable;
pAvailable.IsEnabled = isEnabled;
In "Add-in" code we need to have AddIn.FromID() method
public static class AddIn
public static T FromID<T>(string id) where T : class;
which means we must explicitly use reference to a Class Name (FirstButtonClass, SecondButtonClass). It will create a circular reference and will not work on Bamboo deployment (However, it builds ok on a local machine)
pAvailable = AddIn.FromID<FirstButtonClass>(progId);
pAvailable = AddIn.FromID<SecondButtonClass>(progId); // WE SHOULD NOT USE "SecondButtonClass" here. It will raise circular dependency error on aBamboo deployment
Question: can we use another ArcObjects API to disable buttons?
We cannot change the architecture. Each button exists in its own .Net solution. See the attached simple projects.
C#, ArcObjects 10.6.1