0

XMLを使用して、画像を含むボタンがあるカスタムExcelリボンを作成しています。ボタンが押されたときに(トグルのように)この画像を変更して、その状態を表示できるようにしたいと思います。ボタンを説明する次のXMLがあります。

<button id="MyButton"
            label="MyLabel"
            screentip="Some useful info."
            onAction="MyAction"
            getImage="GetImage"
            size="large"/>

MyActionメソッドが次のように定義されている場合:

public void MyAction(Office.IRibbonControl control)
{
     // Change button image here...
}

メソッドでボタンの画像を変更する方法はありMyAction()ますか?

乾杯

4

3 に答える 3

4

編集:申し訳ありませんが、これがC#フォーラムにあることに気づき、VBで関数を作成しました。コードをC#に変換する必要がありますか?コールバックの動作は同じである必要があることに注意してください。

コントロールを更新する最も簡単な方法は、コントロールまたはリボン全体を無効にし、getImage、getVisible、getLabelなどのコントロールのコールバックを介してパラメーターを更新することです。ここに書き込むものは、コントロールのパラメーターのいずれでも機能します(ラベル、有効、表示、...)

したがって、XMLでボタンを次のように定義すると、次のようになります。

<button id="MyButton"
        label="MyLabel"
        onAction="OnAction"
        getImage="GetImage"/>

次に、OnActionコールバックを使用して、ボタンのパラメーターを次のように更新できます(conditionというブール変数があると仮定します)。

Public Sub OnAction(ByVal control As Office.IRibbonControl)

    // Do your button stuff here

    condition = Not condition

    gui.InvalidateControl(control.Id)

End Sub

次に、ボタンのコールバックが呼び出されます。getImageの場合、次を使用できます。

Public Function GetImage(ByVal control As Office.IRibbonControl) As String

    If condition Then
        Return "MacroPlay"
    Else
        Return "DeclineInvitation"
    End If

End Function

これをすべて機能させるには、リボンをgui変数に格納する必要があることに注意してください。このためには、XMLで使用する必要があります。

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnRibbonLoad"> ...

とコードで:

Public Sub OnRibbonLoad(ByVal ribbon As Office.IRibbonUI)

    gui = ribbon

End Sub
于 2013-01-10T15:34:16.340 に答える
0

あなたが正しいように見えます。カスタムリボン要素の外観を編集するために私が見つけた唯一の方法は、XMLではなく「リボン(ビジュアルデザイナー)」を使用することです。

たとえば、と呼ばれるトグルボタンで画像を変更したい場合toggleButton1は、次のようにすることができます。

public void toggleButton1_Click(object sender, RibbonControlEventArgs e)
{
    toggleButton1.Image = GetImage(toggleButton1.Checked);
}

ここで、GetImageは次のように定義されます。

public Bitmap GetImage(bool pressed)
{      
    return new Bitmap(pressed ? Properties.Resources.img_1 : Properties.Resources.img_2);
}

乾杯

于 2012-10-25T07:00:31.523 に答える
0
<button id="MyButton" label="MyLabel" onAction="OnAction" getImage="GetImage"/>

上記の解決策は私のために働いた。customUIxmlノードでloadImageイベントを使用しないように注意してください。loadImageとGetImageの両方を使用すると、アドインの読み込みに失敗するようです。

于 2013-04-17T18:11:41.263 に答える