我在Word中有自定义功能区。功能区有一个组合框: comboBox_recentConditions ,它是使用Designer定义的 - 所以它是初始化的并且在加载时是空的。现在,我想在每次触发Application_WindowActivate事件时动态设置此comboBox。
每个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;
}
问题是,即使在调用Application_WindowActivate之后,Ribbon comboBox控件也不会更改,它始终为空。 我在运行时测试,看看每个文档是否确实有自己的comboBox及其项目 - 这似乎有效。 我错过了什么?
要清除我的问题: 假设我在comboBox.Items中有3个项目。点击它时我什么都没看到,但是如果我添加它:
MessageBox.Show(Globals.Ribbons.SourceRibbon.comboBox_recentConditions.Items.Count.ToString());
在Application_WindowActivate
的末尾,它将打印数字3。
感谢。
答案 0 :(得分:0)
你不能那样做。请阅读Ribbon callbacks
您必须使用getItemLabel事件,该事件会将项目添加到组合框中。如果您想在WindowActivate期间加载组合框,请拨打Ribbon.Invalidate或Ribbon.InvalidateControl,这将调用所有相关的功能区回调。