2

editBox を備えたシンプルな Outlook リボンがあります。ユーザーが送信ボタンをクリックすると、文字列が editBox に取り込まれ、Application_ItemSend で使用されます。

私の問題は、機能が完了した後、ユーザーが新しいメッセージ画面を開くときに同じボックスに以前に入力した文字列が表示されないように、リボンの UI (editBox のみ) をリセットしたいことです。Ribbon.Invalidate を試しましたが、その文字列値を取り除くことができないようです。「新しいメール」画面を再度開くと、古い値がまだ表示されています。

コードは次のとおりです。

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load_2010">
<ribbon>
<tabs>
  <tab idMso="TabNewMailMessage">
    <group id="TaskManager" insertBeforeMso="GroupSend" label="Task Manager">
      <editBox id="editboxTaskID" label="Task ID #: " onChange="editboxTaskID_OnChange" 
imageMso="RecordsAddFromOutlook" sizeString="wwwwww"/>
    </group>
  </tab>
</tabs>
</ribbon>
</customUI>

そしてVBコード:

<Runtime.InteropServices.ComVisible(True)> _
Public Class CustomRibbon
Implements Office.IRibbonExtensibility

Private ribbon As Office.IRibbonUI
Public strTask_ID As String = ""

Public Sub New()

End Sub

Public Function GetCustomUI(ByVal ribbonID As String) As String Implements Office.IRibbonExtensibility.GetCustomUI
    Return GetResourceText("Addin.Ribbon.xml")
End Function

Private Sub Application_ItemSend(ByVal Item As Object, ByRef Cancel As Boolean)
    Me.ribbon.Invalidate()
    Try

 'SOME CODE HERE WHICH WORKS FINE!

    Catch ex As Exception
    End Try

End Sub


'Create callback methods here. For more information about adding callback methods, select the Ribbon XML item in Solution Explorer and then press F1.
Public Sub Ribbon_Load_2010(ByVal ribbonUI As Office.IRibbonUI)
    Me.ribbon = ribbonUI
    AddHandler Globals.ThisAddIn.Application.ItemSend, AddressOf Application_ItemSend
End Sub

Public Sub editboxTaskID_OnChange(ByVal control As Office.IRibbonControl, ByVal Text As String)
    strTask_ID = Text
End Sub

Public Sub AttachmentRibonClick(ByVal control As Microsoft.Office.Core.IRibbonControl)
    Globals.ThisAddIn.TriggerTaskWindow("Attachment")
End Sub

Private Shared Function GetResourceText(ByVal resourceName As String) As String
    Dim asm As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly()
    Dim resourceNames() As String = asm.GetManifestResourceNames()
    For i As Integer = 0 To resourceNames.Length - 1
        If String.Compare(resourceName, resourceNames(i), StringComparison.OrdinalIgnoreCase) = 0 Then
            Using resourceReader As IO.StreamReader = New IO.StreamReader(asm.GetManifestResourceStream(resourceNames(i)))
                If resourceReader IsNot Nothing Then
                    Return resourceReader.ReadToEnd()
                End If
            End Using
        End If
    Next
    Return Nothing
End Function
End Class
4

2 に答える 2

6

無効化メソッドは、コントロールが更新され、画面に再レンダリングする必要があることを通知するために使用されます。コントロールからデータを消去しません。必要なことは、問題のある文字列値を空の文字列に格納するコントロール (この場合は編集ボックス) のプロパティを設定することです。

于 2012-11-07T15:43:42.093 に答える
4

わかりました、私はそれを理解しました。

どうやらコントロールを無効にした後、Editbox の GetText 関数を使用して値を初期化する必要があります。

    Public Function editboxTaskID_GetText(ByVal control As Office.IRibbonControl) As String
        Return ""
    End Function

また、他のサイトが関数に異なる署名を使用していることにも気付きました-これは機能しません。Microsoft は、2010 Interop に移行するときに、これを Sub から Function に変更したと思います。

マイクロソフトがこれに関するより良いドキュメントを提供してくれることを願っています。

ハッピープログラミング!

于 2012-11-15T14:10:39.037 に答える