我現在有工作,我從同事那裏得到了一個解決方案。
雖然它不能解決從任何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...
}
希望這有助於其他人誰遇到這個問題。
什麼是你的目標是什麼? Office應用程序中的大多數功能都可以通過應用程序的對象模型來訪問,這意味着您不需要與UI進行交互。 – popester 2009-12-14 07:26:58
我們有一個MS Word的企業標準定製。其中的一部分是帶有按鈕的工具欄,可以執行各種操作。該工具欄有一個啓動「打印設置」對話框的按鈕,用戶可以直接進入該對話框。這是我們已經提供了一段時間,並已在VBA中實施。 現在我們正在轉向VSTO,我們試圖在C#而不是VBA中實現這一點。所以我們的目標是保留我們以前使用VSTO而不是VBA的相同功能。 – 2009-12-14 08:13:51