0

我在 Word 中有一个自定义功能区。功能区有一个组合框:comboBox_recentConditions,它是使用设计器定义的 - 因此它已初始化并且在加载时为空。现在,我想在每次触发 Application_WindowActivate 事件时动态设置此组合框。

每个 Word 文档都有自己的名为RibbonControls的类实例:

class RibbonControls
{
    private RibbonComboBox recentConditionComboBox;

    public RibbonControls()
    {
        this.recentConditionComboBox = new RibbonComboBox();
    }

    public RibbonComboBox RecentConditionComboBox
    {
        get
        {
            return recentConditionComboBox;
        }
        set
        {
            recentConditionComboBox = value;
        }
    }
}

现在在 Application_WindowActivate 事件中,我执行以下操作:

    static void Application_WindowActivate(Document doc, Window Wn)
    {
        Globals.Ribbons.SourceRibbon.comboBox_recentConditions = WordGate.docRibbonControls.RecentConditionComboBox; 
    }

问题是 Ribbon 组合框控件不会更改,它始终是空的,即使在调用 Application_WindowActivate 之后也是如此。我在运行时进行了测试,看看每个文档是否确实有自己的组合框及其项目——这似乎有效。我错过了什么?

澄清我的问题: 假设我在 comboBox.Items 中有 3 个项目。单击它时,我什么也看不到,但是如果我添加以下内容:

MessageBox.Show(Globals.Ribbons.SourceRibbon.comboBox_recentConditions.Items.Count.ToString());

最后Application_WindowActivate会打印出数字 3。

谢谢。

4

1 回答 1

0

你不能那样做。请阅读功能区回调

您必须使用将项目添加到组合框中的 getItemLabel 事件。如果您想在 WindowActivate 期间加载组合框,请调用Ribbon.InvalidateRibbon.InvalidateControl,这将调用所有相关的功能区回调。

于 2013-10-06T20:26:05.257 回答