运行时间/从代码中启用/禁用按钮 - Outlook加载(Outlook Add-In - Ena

2019-10-17 13:40发布

初始状态:

我们正在开发用于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 ()不破坏代码执行)

谢谢!

基督教

Answer 1:

您将要功能区以相当频繁率,以刷新每个选项卡/按钮的可见性无效。 您可以通过订阅点击事件(如你所做的),然后调用做到这一点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" />


Answer 2:

下面标题为文章添加自定义动态菜单的Office Fluent用户界面将指向您在正确的方向。

下面是一个动态创建的菜单的一个例子,你可以修改教程,以满足您的特殊需要。



Answer 3:

好了,感谢您的提示。 最后我解决了它是这样的:

我声明静态带状物体,如:

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));
}

也许这是对别人的帮助。



文章来源: Outlook Add-In - Enable/Disable Button during Runtime/from Code