2009-12-08 3 views
0

Microsoft Word 2003 용 VSTO AddIn에 MS Word "인쇄 설정"대화 상자를 표시하려고합니다. 대화 상자를 표시 할 수 있습니다 상자가 표시되지만 대화 상자의 왼쪽 하단 모서리에있는 옵션 버튼은 다음 화면 캡처에 따라 항상 비활성화됩니다.프로그래밍 방식으로 MS Word 인쇄 설정 대화 상자에서 "옵션 ..."단추를 활성화하는 방법

alt text http://i47.tinypic.com/f38gbc.jpg

내가 지금까지 한 일에 대한 관련 코드는 다음과 같습니다

private void printSetup_Click(CommandBarButton Ctrl, ref bool CancelDefault) 
{ 
    Dialog dialog = App.Dialogs[WdWordDialog.wdDialogFilePrintSetup]; 
    Object missing = Type.Missing; 
    dialog.Show(ref missing); // Note that the param is TimeOut 
} 

는 아무도 내가 옵션 버튼을 활성화해야 할 일을 말해 줄래? 나는 ... 우리가 VBA에서이 작업을 수행하는 데 사용되는 템플릿을 대체하고 있기 때문에 할 수 있고, 버튼이 활성화되어

안부, 벤을 알고

+0

목표는 무엇입니까? Office 응용 프로그램의 대부분의 기능은 응용 프로그램의 개체 모델을 통해 액세스 할 수 있습니다. 즉, UI와 상호 작용하지 않습니다. – popester

+0

MS Word의 기업 표준 사용자 정의가 있습니다. 그 중 일부는 다양한 작업을 수행하는 버튼이있는 툴바입니다. 이 도구 모음에는 "인쇄 설정"대화 상자를 시작하는 단추가있어 사용자가 직접 인쇄 할 수 있습니다. 우리가 잠시 동안 제공해온 것으로 VBA에서 구현되었습니다. 이제 VSTO로 이동하면서 VBA가 아닌 C#으로 구현하려고합니다. 따라서 VBA보다는 VSTO를 사용하여 이전과 동일한 기능을 유지하는 것이 목표입니다. –

답변

0

나는 지금은 동료에서 가져온 것이 작동하는 해결책을 가지고 있습니다.

VSTO C# 코드에서이 대화 상자를 시작하는 일반적인 경우는 해결되지 않지만 도구 모음 단추를 클릭하면이 대화 상자가 올바르게 시작됩니다 (우리가하려는 작업). . 이렇게하면 문제가 해결됩니다.

나는 이것이 MS Word의 버그 (기능) 일 뿐이며 코드에서이 대화 상자를 표시하고 "옵션 ..."버튼이 활성화 된 일반적인 방법이 없다는 사실이 실제로 나타났습니다. . 대화 상자가 내장 된 컨트롤로 CommandBar에 연결되어 있기 때문에 대화 상자가 MS Word에서 자동으로 호출 된 경우에만 작동한다고 생각합니다. VBA에서뿐만 아니라 Word 제한/버그라는 이론을 뒷받침하는 VSTO를 통해 동일한 동작을 보았습니다.

그래서 우리는 이전과 같은 코드했다 :

public MyCommandBar() 
{ 
    _myBar = App.CommandBars.Add("My Toolbar", 1, Type.Missing, true); 

    // Add a button to call our custom event handler 
    _printSetup = (CommandBarButton) 
      _myBar.Controls.Add(MsoControlType.msoControlButton, 
      Type.Missing, Type.Missing, 1, true); 
    _printSetup.Click += printSetup_Click(); // Call the handler shown in my original question 
    // More stuff... 
} 

을 그리고 전화를 수정하면 내장 된 제어 (511 Type.Missing에서 두 번째 인수 Controls.Add에로 (ID)를() 변경 파일 인쇄 설정 대화 상자의 ID)과 같이 "옵션이 ..."버튼을 하나의 기대처럼 사용할 수 있습니다 :

public MyCommandBar() 
{ 
    _myBar = App.CommandBars.Add("My Toolbar", 1, Type.Missing, true); 

    // Call the built-in File Print Setup dialog automagically 
    _printSetup = (CommandBarButton) 
      _myBar.Controls.Add(MsoControlType.msoControlButton, 
      511, Type.Missing, 1, true); 
    // More stuff... 
} 

는 희망이이 문제로 실행 등을 할 수 있습니다.

0

대화 상자의 특성 늦게 통해서만 사용할 수 있습니다 바인딩 및 C#을 사용하고 있으므로 작업중인 대화 상자와 관련된 값을 가져오고 설정하려면 InvokeMember을 사용해야합니다.

WdWordDialog Enumeration의 설명서에서 WdWordDialog.wdDialogFilePrintSetup 대화 상자의 경우 Options 속성을 사용할 수 있음을 알고 있습니다. 이 링크는 Office 2007 용이지만, 필요한 경우에는 충분할 것입니다. 이 같은 대화 속성 값을 설정 할 수있는이 지식으로

:

object objectDialog = (object)dialog; 

object[] args = new object[1]; 
args[0] = (object) null; // Specify value for Options attribute just as in VBA 

objectDialog.GetType().InvokeMember(
    "Options", 
    BindingFlags.SetProperty, 
    null, 
    objectDialog, 
    args); 
+0

감사합니다 Joao, 그러나 나는 "옵션"속성의 유형이 무엇인지 전혀 모르고 그것에 관한 문서를 찾을 수 없습니다. 불행히도 링크 된 MSDN 페이지는 사용할 수있는 특성 만 나열하지만 어떤 유형 (문자열, 부울 등)인지는 설명하지 않으며 정보가있는 다른 페이지를 찾을 수 없습니다. "DoNotSetAsSysDefault"매개 변수는 bool이고 "Printer"는 문자열이지만 "옵션"에 대해서는 알지 못합니다. 사실로 설정하려고했지만 작동하지 않았습니다 (예외가 발생하지 않고 동작을 변경하지 않았습니다). 다른 아이디어 나 나에게 더 긴 코드 스 니펫이 있습니까? 감사. –

+0

대화 상자는 현재 어떻게 표시됩니까? VBA가있는 경우 대화 상자를 표시하는 데 사용되는 코드를 공유 할 수 있습니까? –

+0

Joao, 대화 상자는 현재 내 대답과 거의 같은 방식으로 VBA의 도구 모음 단추에서 기본 제공 컨트롤로 표시됩니다. VBA를 사용하여 대화 상자를 표시하려고하면 (예 : 이벤트 처리기 메서드에서) "옵션 ..."단추와 동일한 문제가 발생합니다. 나는 옵션 버튼이 MS Word의 버그 일 뿐이라고 확신하지만, 해결 방법은 CommandBarControl.Add() 메소드를 통해 내장 컨트롤로 트리거하는 것입니다.이 메서드는 " 옵션 ... "버튼이 활성화되었습니다. 도와 줘서 고마워, 벤. –

관련 문제