0

好的,所以我生成了一个非常简单的功能区,以添加到用户打开的每个新撰写窗口中。丝带第一次工作正常。它上面有 2 个复选框,假设用户选择第一个复选框并发送他们的消息。

如果我在用户发送第一条消息时调试代码。如果ItemSend我访问Globals.Ribbons.MyRibbon.MyCheckbox1.Checked它,它将显示该复选框已选中。该窗口关闭,用户打开一封新电子邮件。

假设在第二封电子邮件中,用户单击了第二个复选框Globals.Ribbons.MyRibbon.MyCheckbox2.Checked。如果我调试相同的ItemSend事件并查看该字段,它将显示为 false,并且当前选中了第一个复选框。

就好像Globals.Ribbons.MyRibbon控制实例没有得到正确更新,或者我误解了它没有得到正确处理。

编辑 1

作为更新,我使用了功能区(可视化设计器)来创建我的功能区。我应该使用功能区 (XML) 吗?

编辑 2

不知道如何将它添加到我的问题中,当它已经在上面的原始问题中时会有什么不同,但这是我在应用程序中使用的“代码”。

private void ThisAddIn_Startup(object sender, System.EventArgs e) {
    this.Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
}

void Application_ItemSend(object Item, ref bool Cancel) {
    if (Globals.Ribbons.MyRibbon.MyCheckbox1.Checked) {

    } else { 

    }
}
4

1 回答 1

0

所以我的问题是我没有访问当前的功能区集合。正如上面的代码所述,我使用的是Globals.Ribbons.MyRibbon.Checkbox1.Checked. ItemSend对于您需要指定的每个事件ThisRibbonCollection ribbonCollection = Globals.Ribbons[Globals.ThisAddIn.Application.ActiveInspector()];,以获取当前的 Windows 功能区。这反过来又给了我发送事件的正确值。

对于那些在代码窗口中需要它的人。

private void ThisAddIn_Startup(object sender, System.EventArgs e) {
    this.Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
}

void Application_ItemSend(object Item, ref bool Cancel) {
    ThisRibbonCollection ribbonCollection = Globals.Ribbons[Globals.ThisAddIn.Application.ActiveInspector()];
    if (ribbonCollection.MyRibbon.MyCheckbox1.Checked) {

    } else { 

    }
}
于 2012-12-20T22:56:48.527 回答