2014-12-12 4 views
1

Я занимаюсь разработкой MS Word 2010 AddIn, в котором у меня есть выпадающий, который обновляет класс свойство, когда оно изменяется:Разрегистрировать выпадающий SelectedIndexChanged событие до того AddIn остановки

private void comboboxFloweringStart_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Globals.ThisAddIn.currentTaxon.FloweringStart = (short)this.comboboxFloweringStart.SelectedIndex; 
} 

Этот класс сериализован на выключение (ThisAddIn_Shutdown обработчик события). Комбобокс расположен на Microsoft.Office.Tools.CustomTaskPane taxonMarkupPanel на основе пользовательского элемента управления TaxonPanel myTaxonPanel, который я разработал.

Проблема заключается в том, что в какой-то момент перед событием shutdown событие SelectedIndexChanged в combobox срабатывает и сбрасывает значение в 0, и это значение, которое сериализуется. Я знаю, что я мог бы использовать SelectionChangeCommitted вместо SelectedIndexChanged, но иногда я устанавливаю индекс в коде, и событие также должно срабатывать в этих случаях.

В CustomTaskPane нет закрытого события, которое я мог бы использовать для отмены подписки обработчика события, и я не знаю порядок событий, когда VSTO закрыт. Есть ли еще какое-то другое событие, на которое я мог бы подписаться, или каким-либо другим способом, чтобы я мог отказаться от подписывания обработчика события SelectedIndexChanged, когда пользовательская панель задач/пользовательский контроль закрыт?

ответ

1

Вы должны подписаться на DocumentBeforeClose случае применения и/или Close событие документа.

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    Word.Application app = this.Application; 
    Word.Document doc = app.ActiveDocument; 
    app.DocumentBeforeClose += new Word.ApplicationEvents4_DocumentBeforeCloseEventHandler(ThisAddIn_DocumentBeforeClose); 
    ((Word.DocumentEvents2_Event)doc).Close += new Word.DocumentEvents2_CloseEventHandler(ActiveDocument_Close); 
} 

private void ThisAddIn_DocumentBeforeClose(Word.Document doc, ref bool cancel) 
{ 
    MessageBox.Show(string.Format ("Document {0} is closing.", doc.Name)); 
} 

private void ActiveDocument_Close() 
{ 
    MessageBox.Show("Active document is closing."); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^