我正在尝试在VSTO AddIn for Microsoft Word 2003中显示MS Word“打印设置”对话框。我可以显示对话框,但对话框左下角的选项按钮始终按照以下截图。
到目前为止,我所做的相关代码是:
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 :(得分: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);
答案 1 :(得分:0)
我现在有一个解决方案可以解决我从同事那里得到的问题。
虽然它没有解决从任何VSTO C#代码启动此对话框的更一般情况,但它可以通过单击工具栏按钮(我们正在尝试这样做)正确启动此对话框。所以这解决了我们的问题。
我现在的意见是,这是MS Word的一个错误(功能?),并且没有任何通用的方法从代码显示此对话框并启用“选项...”按钮。我认为它只能在MS Word自动调用对话框时才能工作,因为它作为内置控件连接到CommandBar。我在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...
}
当修改为通过将第二个参数(Id)更改为Controls.Add()从Type.Missing到511(文件打印设置对话框的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...
}
希望这有助于遇到此问题的其他人。