1

こんにちは、予定タブに新しいカスタマイズされたトグル ボタンを追加したい Outlook のアドインを開発しています。予定を保存するときに、トグル ボタンの現在の状態を取得したいと考えています。これまでの私のコードは次のとおりです。

ボタンはすでに作成されていますが、保存を押してもボタンコントロールを取得できません。リボン 1.xml:

<tab idMso="TabAppointment">
        <group id="SalesforceGroup" label="Salesforce">
          <toggleButton id="ImportToSalesforce" size="large"
            label="Import to Salesforce" imageMso="DatabaseInsert"
            getPressed="GetPressed"
            onAction="Salesforce_Click"  />
        </group>
      </tab>

リボン 1.vb:

Public Sub GetPressed(ByVal control As Office.IRibbonControl)
        MsgBox("test")   ' This alert only pops up when the appointment window opens
    End Sub

Public Sub Salesforce_Click(ByVal control As Office.IRibbonControl)
    MsgBox("test")    ' This alert never pops up
End Sub

このAddIn.vb:

Private Sub inspectors_NewInspector(ByVal Inspector As Microsoft.Office.Interop.Outlook.Inspector) Handles inspectors.NewInspector
    If TypeName(Inspector.CurrentItem) = "AppointmentItem" Then
        MsgBox("event")
        oAppointmentItem = TryCast(Inspector.CurrentItem, Outlook.AppointmentItem)
        AddHandler oAppointmentItem.Write, AddressOf Item_Save
    End If
End Sub

Private Sub Item_Save(ByRef Cancel As Boolean)
  'get IRibbonControl
End Sub

更新: パラメータが正しく設定されていないため、 onAction 関数が呼び出されないという問題を修正しました: Ribbon1.vb:

Public Sub Salesforce_Click(ByVal control As Office.IRibbonControl, _
    ByVal isPressed As Boolean)
    MsgBox("test2")
End Sub

しかし、主な問題は次のとおりです。ユーザーが保存を押したときに、toogle ボタンの状態を取得する方法は?

4

2 に答える 2

2

カスタム UI マークアップで宣言された GetPressed 関数を、toggleButton のコールバックとして呼び出す必要があります。次のようになります。

C#: bool GetPressed(IRibbonControl control)
VBA: Sub GetPressed(control As IRibbonControl, ByRef returnValue)
C++: HRESULT GetPressed([in] IRibbonControl *pControl, [out, retval]VARIANT_BOOL *pvarfPressed)
Visual Basic: Function GetPressed(control As IRibbonControl) As Boolean

ご覧のとおり、関心のあるブール値を返します。コールバックでパラメーターを使用しない場合は、Nothing (C# では null) を渡すだけです。

リボン コールバックがどのように設計され、使用されるべきかを理解していないようです。MSDN の次の一連の記事を読むことをお勧めします。

また、Globals.Ribbons プロパティが役立つ場合があります。詳細については、「実行時のリボンへのアクセス」を参照してください。

于 2015-03-26T13:26:38.620 に答える
1

あなたの基本的なニーズを理解しているので、予定が保存されたときにトグルボタンの「ImportToSalesforce」の状態を確認できる必要があります。リボン XML の代わりにリボン (ビジュアル デザイナーから作成) を使用しても問題ないかどうかはわかりません (リボン XML はより柔軟であり、ビジュアル デザイナーで作成されたリボンと比較してより多くのプログラミングが必要です)。

Visual Designer を使用してリボンを作成すると (トグル ボタンが必要)、リボン コレクションを使用して、アドイン内のどこからでもリボン オブジェクトに簡単にアクセスできます。

ThisRibbonCollection リボン = Globals.Ribbons[Globals.ThisAddIn.Application.ActiveInspector()]; ribbons.SalesForceRibbon.toggleButton1.Checked <-- これが必要です!

リボン ビジュアル デザイナーの代わりにリボン XML を本当に使用する必要がある場合は 、実行時にリボン (XML) にアクセスする方法はありますか?を参照してください。

于 2015-03-28T14:32:15.487 に答える