2012-10-10 5 views
1

vsto Excel 추가 기능을 만들고 있는데 현재 기능을 변경하거나 닫기 창 단추를 눌렀을 때 함수를 호출하는 기능을 추가하는 방법을 찾으려고합니다. 현재 스프레드 시트 누구나 이것이 가능하거나 어떤 제안이 있다면 알 수 있습니까? 지금까지 아무 것도 찾을 수 없었습니다.VSTO 닫기 창 단추 다시 매핑

답변

0

통합 문서 클래스에는 통합 문서가 닫힐 때를 감지하는 데 사용할 수있는 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 방법에 코드를 추가 할 수있는 기능을 추가합니다.