使用Visio2013,我面临着InvalidateControl方法(或Visio机制)的奇怪行为。我的想法是,每当我在dropDown1中更改其项值时,就会更改它中的选定项。
当我更改文本并点击带状选项卡上的空闲区域时,它会工作,但如果我单击editBox2使其处于活动状态(焦点),则不起作用。在后一种情况下,只有在我随后单击DropDown本身时,DropDown才会得到更新(并调用回调)。
我还注意到,每当Visio窗口失去焦点并再次获得它时,DropDown就会得到更新(例如,如果我切换到另一个应用程序并返回),所以我的另一个讨厌的想法是强制Visio以某种方式更新其UI (例如通过WinAPI,如RedrawWindow等),不幸的是,我并不了解WinAPI的所有内容。
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab idMso="TabAddIns">
<group id="group3" label="Test">
<box id="box1">
<editBox id="editBox1"
getText="GetText"
onChange="EditBoxTextChange"
sizeString="WWW" />
<editBox id="editBox2"
getText="GetText"
sizeString="WWW" />
<dropDown id="dropDown1"
getSelectedItemIndex="GetSelectedItemIndex"
getItemCount="GetItemCount"
getItemLabel="GetItemLabel"
sizeString="WWW" />
</box>
</group>
</tab>
</tabs>
</ribbon>
</customUI>丝带类
public class Ribbon1 : Office.IRibbonExtensibility
{
private Office.IRibbonUI ribbon;
string[] data = { "1", "2", "3", "4", "5" };
int selectedIndex;
public Ribbon1()
{
}
#region IRibbonExtensibility Members
public string GetCustomUI(string ribbonID)
{
return GetResourceText("FosusTest.Ribbon1.xml");
}
#endregion
#region Ribbon Callbacks
//Create callback methods here. For more information about adding callback methods, visit http://go.microsoft.com/fwlink/?LinkID=271226
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
}
public string GetText(IRibbonControl control)
{
if (control.Id == "editBox1")
{
return "1";
}
else
{
return "2";
}
}
public void EditBoxTextChange(IRibbonControl control, string text)
{
for (var i = 0; i < data.Count(); ++i)
{
if (data[i] == text)
{
selectedIndex = i;
ribbon.InvalidateControl("dropDown1");
break;
}
}
}
public int GetSelectedItemIndex(IRibbonControl control)
{
return selectedIndex;
}
public int GetItemCount(IRibbonControl control)
{
return data.Count();
}
public string GetItemLabel(IRibbonControl control, int index)
{
return data[index];
}
#endregion
}示例项目 Visual 2013 / Visio 2013
发布于 2020-08-31 15:35:28
这可能是一个特定的Visio版本(2013年)的问题吗?对我来说,一切似乎都正常工作(当您将焦点从edit1更改为edit2时,组合框会发生变化)?这是最新的Visio (16.0.13127):

如果它不仅适用于2013年,我会尝试service :)也就是说,代码本身看起来不错,没有什么问题。
如果您真的-真的需要一个特定版本的"hacky“解决方案,我将尝试订阅VisioIsIdle事件,并在那里进行更新。
https://stackoverflow.com/questions/63669312
复制相似问题