1

初期状況:

Framework 4.0、VSTO、DevExpress WinForm コントロールに基づく VS.NET 2010 を使用して C# で Outlook 2010 用のアドインを開発しています。Designer では、RibbonTab、RibbonGroup、RibbonButton を持つリボンがあります。この Outlook アドイン内から Web サービスを使用しています。

目的:

WebService が使用可能/使用不可の場合 (コードから/コード外で)、RibbonButtons を有効/無効にする必要があります。

次のリンクが見つかりました。

リンク

リボン オブジェクト モデルの概要: 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

これを実装する方法を何時間も考えた後、SO でこの質問を投稿/質問することにしました。誰かサンプルコードを持っていますか? IRibbonExtensibility と CreateRibbonExtensibilityObject を試しました => RibbonTab、Group、および Button を追加し、Click イベントにサブスクリプションを追加しました => イベントは発生しますが処理されません (button_Click(...) で => System.Diagnostics.Debugger.Break () はコードの実行を妨げていません)

ありがとう!

キリスト教徒

4

3 に答える 3

1

各タブ/ボタンの表示を更新するために、かなり頻繁にリボンを無効にする必要があります。これを行うには、Click イベントをサブスクライブして (既に行ったように)、 を呼び出しRibbonObject.Invalidate();ます。次に、(Ribbon.cs ファイルで定義された) Web サービスが使用可能かどうかを返すgetEnabled="yourTestFunction"パラメーターを各ボタンに追加します。public bool yourTestFunction(Office.IRibbonControl control)

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" />
于 2013-01-10T00:21:20.200 に答える
0

Office Fluent User Interface へのカスタム動的メニューの追加というタイトルの次の記事は、正しい方向性を示しています。

以下は、動的に作成されたメニューの例です。特定のニーズに合わせてチュートリアルを変更できます。

動的に作成されるメニューの例

于 2013-01-15T22:33:02.930 に答える