2012-10-10 89 views
1

我创建了一个vsto excel加载项,我试图找到一种方法来更改当前的功能或添加按下关闭窗口按钮时调用某个功能的功能当前的电子表格。有谁知道这是可能的还是有什么建议?到目前为止,我还没能找到很多东西。VSTO重新关闭窗口按钮

回答

0

Workbook类有一个名为BeforeClose的事件,您可以使用它来检测工作簿何时关闭。您也可以通过将Cancel参数设置为true来使用此事件来阻止它被关闭。

要在当前工作簿上检测到此事件,必须在当前工作簿上附加BeforeClose事件的事件处理程序。

最简单的方法是在引发Application.WorkbookActivate时将事件处理程序附加到BeforeClose事件。并将其从以前的活动工作簿中分离出来。

例如

private Workbook _activeWorkbook = null; 

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    Application.WorkbookActivate += Application_WorkbookActivate; 

    // Attach to the BeforeClose event on the Workbook that 
    // was created when Excel started 
    _activeWorkbook = Application.ActiveWorkbook; 
    if (_activeWorkbook != null) 
    { 
     _activeWorkbook.BeforeClose += ActiveWorkbook_BeforeClose; 
    } 
} 

private void Application_WorkbookActivate(Microsoft.Office.Interop.Excel.Workbook Wb) 
{ 
    if (_activeWorkbook != null) 
    { 
     _activeWorkbook.BeforeClose -= ActiveWorkbook_BeforeClose; 
     Marshal.ReleaseComObject(_activeWorkbook); 
    } 

    _activeWorkbook = Wb; 
    _activeWorkbook.BeforeClose += ActiveWorkbook_BeforeClose; 
} 

private void ActiveWorkbook_BeforeClose(ref bool Cancel) 
{ 
    Cancel = MessageBox.Show("Do you want to close the workbook?", "Close Workbook", MessageBoxButtons.YesNo) != DialogResult.Yes; 
} 

所以,如果你想改变目前的功能或添加调用函数时按下当前电子表格中的关闭窗口按钮,在ActiveWorkbook_BeforeClose方法添加代码的能力。