2009-12-08 74 views
0

我想顯示MS Word的「打印設置」在VSTO外接程序的Microsoft對話框Word 2003中,我可以顯示該對話框框中,但對話框左下角的選項按鈕始終被禁用,如下面的屏幕截圖所示。如何編程啓用「選項...」按鈕,在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 2009-12-14 07:26:58

+0

我們有一個MS Word的企業標準定製。其中的一部分是帶有按鈕的工具欄,可以執行各種操作。該工具欄有一個啓動「打印設置」對話框的按鈕,用戶可以直接進入該對話框。這是我們已經提供了一段時間,並已在VBA中實施。 現在我們正在轉向VSTO,我們試圖在C#而不是VBA中實現這一點。所以我們的目標是保留我們以前使用VSTO而不是VBA的相同功能。 – 2009-12-14 08:13:51

回答

0

我現在有工作,我從同事那裏得到了一個解決方案。

雖然它不能解決從任何VSTO C#代碼啓動此對話框的更一般情況,但它可以正確啓動該對話框,因爲它可以單擊工具欄按鈕(這是我們正在嘗試執行的操作) 。所以這解決了我們的問題。

實際上,我的MS Word現在認爲這是一個錯誤(功能?)的,並且沒有顯示從代碼此對話框,具有任何一般的方式「選項...」按鈕啓用。我認爲,由於它被掛在命令欄的內置控件,如果對話由MS Word會自動調用它只能工作。我在VBA以及通過VSTO看到了相同的行爲,它傾向於支持理論上說這是一個Word限制/錯誤。

因此,我們以前有這樣的代碼:

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... 
} 

當修改爲調用內置的控制由Type.Missing到511變化的第二個參數(標識),以Controls.Add被()(對於文件打印設置對話框中的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,但是我不知道「Options」屬性的類型是什麼,並且找不到任何關於它的文檔。不幸的是,你鏈接到的MSDN頁面只列出了可用的屬性,但沒有說明它們是什麼類型(字符串,布爾等),我找不到任何其他頁面的信息。看起來「DoNotSetAsSysDefault」參數是一個布爾值,「Printer」是一個字符串,但我不知道「選項」。我試圖設置它爲true,但它不起作用(沒有拋出異常,它只是沒有改變行爲)。任何其他想法,或者你有更長的代碼片段嗎?謝謝。 – 2009-12-15 00:51:57

+0

當前如何顯示對話框?如果使用VBA,您可以共享用於顯示對話框的代碼嗎? – 2009-12-15 11:46:40

+0

感謝Joao,事實證明,對話框現在顯示爲VBA中工具欄按鈕的內置控件,與我的答案非常相似。如果嘗試使用VBA顯示對話框(比如在事件處理程序方法中),則會出現與「選項...」按鈕被禁用相同的問題。我很確定選項按鈕被禁用只是MS Word中的一個錯誤,但解決方法是通過CommandBarControl.Add()方法將其作爲內置控件觸發,該方法顯示帶有「選項...「按鈕。謝謝你的幫助,本。 – 2009-12-16 02:32:33

相關問題