初始状态:
我们正在开发用于Outlook 2010在C#中加载与基于框架4.0,VSTO,DevExpress的WinForm的控制VS.NET 2010。 在设计我们有一个RibbonTab功能区,然后RibbonGroup然后RibbonButton。 我们正在消耗从这个Outlook插件内的Web服务。
目的:
我们需要启用/禁用RibbonButtons当WebService可用/不可用(从输入/输出的代码)
我们发现以下链接:
链接
区对象模型概述: http://msdn.microsoft.com/en-us/library/bb608623.aspx区概述: http://msdn.microsoft.com/en-us/library/bb386097.aspx演练:更新:在运行时功能区控件http://msdn.microsoft.com/en-us/library/bb608628.aspx
之后的试图找出如何实现这一点,我们deciced张贴小时/在这里问的SO这个问题。 没有任何人有一个示例代码? 我们尝试了IRibbonExtensibility和CreateRibbonExtensibilityObject =>我们添加了RibbonTab,集团与按钮并添加订阅点击事件=>在事件被触发,但没有处理(在button_Click(...)=> System.Diagnostics.Debugger.Break ()不破坏代码执行)
谢谢!
基督教
您将要功能区以相当频繁率,以刷新每个选项卡/按钮的可见性无效。 您可以通过订阅点击事件(如你所做的),然后调用做到这一点RibbonObject.Invalidate();
。 然后添加一个getEnabled="yourTestFunction"
参数,每一个按钮,与public bool yourTestFunction(Office.IRibbonControl control)
(在Ribbon.cs文件中定义)返回Web服务是否可用。
请记住,如果Web服务已关闭,每次点击都挺适合你的Web服务检查您的超时设置的时间量你的应用程序
编辑:
只要实现了_Click事件在Excel的COM库没有映射,所以这里的一些代码,将每个小区选择改变时(不频繁的每一次点击,但希望足够好)运行。
ThisAddIn.cs
:
public static Excel.Application e_application;
public static Office.IRibbonUI e_ribbon;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
e_application = this.Application;
e_application.SheetSelectionChange += new Excel.AppEvents_SheetSelectionChangeEventHandler(e_application_SheetSelectionChange);
}
void e_application_SheetSelectionChange(object Sh, Excel.Range Target)
{
e_ribbon.Invalidate();
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
e_application.SheetSelectionChange -= new Excel.AppEvents_SheetSelectionChangeEventHandler(e_application_SheetSelectionChange);
e_application = null;
}
Ribbon1.cs
:
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
ThisAddIn.e_ribbon = ribbonUI; //Add this line
}
和
public bool getEnabledTest(Office.IRibbonControl control)
{
//Whatever you use to test your Web Service
//return false;
}
Ribbon1.xml
:
<button id="WebService" label="Use The Web Service" onAction="executeWebService" getEnabled="getEnabledTest" />
下面标题为文章添加自定义动态菜单的Office Fluent用户界面将指向您在正确的方向。
下面是一个动态创建的菜单的一个例子,你可以修改教程,以满足您的特殊需要。
好了,感谢您的提示。 最后我解决了它是这样的:
我声明静态带状物体,如:
public static RibbonIet ribbon {get; set; }
在功能区的加载事件我分配色带(这),如:
Session.Common.ribbon = this;
现在我可以控制像RibbonButton:
Session.Common.ribbon.buttonCreateIncident.Enabled = true;
由于Web服务调用是在一个单独的线程中运行,我不得不使用MethodInvoker改变启用/禁用按钮。 它是这样的:
If (InvokeRequired)
{
Invoke(new MethodInvoker(() => Session.Common.ribbon.buttonCreateIncident.Enabled = true));
}
也许这是对别人的帮助。