It would be logical that you couldn't delete a button during its Click()
event. Think about it.
If you really want to do what you're doing then set a timer in the Click()
event that will fire after that event is completed, then do your refresh in
the timer event handler. Just make sure the timer thread is the same or
marshalled to the main thread.
--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Professional Programming Outlook 2007.
Reminder Manager, Extended Reminders, Attachment Options.
http://www.slovaktech.com/products.htm
"Teodora Gancheva" <TeodoraGancheva.RemoveThis@discussions.microsoft.com> wrote in
message news:8E56D3D7-C998-4A46-AEF2-A1C0822AD3AA@microsoft.com...
> Hi,
> I am developing a C# COM add-in for MS Office 2003 and 2007. My add-in
> creates a custom command bar with a CommandBarPopup menu containing
> several
> CommandBarPopup submenus populated with CommandBarButton objects. Upon
> user
> click on some buttons, I'd like to perform 'refresh' on the submenus i.e.
> delete the buttons and re-create them.
> I am doing so using the following code:
> for (int index = 1; index <= popup.Controls.Count; index++)
> {
> popup.Controls[index].Delete(1);
> index--;
> }
> This works for all buttons except the one that was actually clicked, for
> it
> a COMException with message "Error HRESULT E_FAIL has been returned from a
> call to a COM component" is thrown. Am I not allowed to delete this button
> because it has just been clicked, and what other options do I have -
> delete
> the whole popup?
> Thanks for all advice,
> Teodora Gancheva