I've developed a SmartTag using C# (btw very slick... thanks VSTO team!). In the smart tag context menu, apart from my own actions, there are some default ones like
Remove This Smart Tag
Stop recognizing 'foo'
etc.
My question is how do I deal with "Remove this Smart Tag" If the user clicks on it, they expect my document will no longer place a smart tag in that same spot. Unfortunately, there doesn't seem to be an event to tell me that the user doesn't want a smart tag there. So the next time my "Recognize" is called, I will re-insert the smart tag (since I will recognize the term again).
I guess I can train users not to use the default option and then create my own "Remove Smart Tag" action to place the text into a "Don't Recognize" list, but that seems like a hack.
Can I subscribe to an event or query the document to find out when a smart tag is removed Can I remove the default remove item or re-implement it's action
Thanks,
Shawn

Remove This Smart Tag
TuscoGrocers
Thank you for the kind words about our Smart Tags implementation.
Regarding your question - we are actually in the mercy of Word here and not much can be done to improve on the experience. "Remove this Smart Tag" will only remove the smart tag until the Word decides to re-scan the particular paragraph. The re-scan is triggered by user modifying the text in the paragraph. So, one way to treat the problem is to tell the users first finish typing the paragraph and then go ahead and remove all the smart tags.
yes, you are correct in your observation that there is no event available to you that would tell you to never recognizer a particular word or phrase. Even more, the Recognize method is not passed a Range object on which you could potentially base your recognize/do not recognize decision). Recognize only sees a piece of text without any additional context.
Also see this document that explains all the smart tags removal options - there are not many.
http://office.microsoft.com/en-us/assistance/HP030833081033.aspx