Outlook 功能区无效不起作用

Outlook 功能区无效不起作用,outlook,vsto,outlook-addin,Outlook,Vsto,Outlook Addin,我有一个带有编辑框的简单outlook功能区。一旦用户单击send按钮,我将在editBox中捕获字符串并在应用程序中使用它 我的问题是,在函数完成后,我想重置功能区的UI(只是编辑框),以便用户在打开新的消息屏幕时不会在同一个框中包含以前键入的字符串。我尝试了Ribbon.Invalidate,但似乎无法删除该字符串值。当我重新打开“新建电子邮件”屏幕时,旧值仍然存在 代码如下: <customUI xmlns="http://schemas.microsoft.com/office/2

我有一个带有编辑框的简单outlook功能区。一旦用户单击send按钮,我将在editBox中捕获字符串并在应用程序中使用它

我的问题是,在函数完成后,我想重置功能区的UI(只是编辑框),以便用户在打开新的消息屏幕时不会在同一个框中包含以前键入的字符串。我尝试了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
_
公共类自定义功能区
实现Office.IRibbonExtensibility
作为Office.IRibbonUI的私有ribbon
Public strTask_ID As String=“”
公共分新()
端接头
公共函数GetCustomUI(ByVal ribbonID作为字符串)作为字符串实现Office.IRibbonExtensibility.GetCustomUI
返回GetResourceText(“Addin.Ribbon.xml”)
端函数
私有子应用程序_ItemSend(ByVal Item作为对象,ByRef Cancel作为布尔值)
Me.ribbon.Invalidate()
尝试
'这里有些代码可以正常工作!
特例
结束尝试
端接头
'在此处创建回调方法。有关添加回调方法的详细信息,请在解决方案资源管理器中选择功能区XML项,然后按F1。
公共子功能区加载2010(ByVal ribbonUI作为Office.IRibbonUI)
Me.ribbon=ribbonUI
AddHandler Globals.ThisAddIn.Application.ItemSend,应用程序的地址\u ItemSend
端接头
Public Sub-editboxTaskID_OnChange(ByVal控件作为Office.IRibbonControl,ByVal文本作为字符串)
strTask_ID=文本
端接头
公共子附件EntribonClick(ByVal控件作为Microsoft.Office.Core.IRibbonControl)
Globals.ThisAddIn.TriggerTaskWindow(“附件”)
端接头
私有共享函数GetResourceText(ByVal resourceName作为字符串)作为字符串
将asm设置为Reflection.Assembly=Reflection.Assembly.getExecutionGassembly()
Dim resourceNames()为String=asm.GetManifestResourceNames()
对于i,整数=0到resourceNames.Length-1
如果String.Compare(resourceName、resourceNames(i)、StringComparison.OrdinalIgnoreCase)=0,则
将resourceReader用作IO.StreamReader=新建IO.StreamReader(asm.GetManifestResourceStream(resourceNames(i)))
如果resourceReader不是空的,那么
返回resourceReader.ReadToEnd()
如果结束
终端使用
如果结束
下一个
一无所获
端函数
末级

无效方法用于表示控件已更新,需要在屏幕上重新呈现。它不会清除控件中的数据。您需要做的是在控件(本例中为编辑框)上设置属性,该控件将有问题的字符串值存储为空字符串。

好的,我已经解决了

显然,在使控件无效后,需要使用Editbox的GetText函数初始化该值

    Public Function editboxTaskID_GetText(ByVal control As Office.IRibbonControl) As String
        Return ""
    End Function
我还注意到其他网站使用不同的功能签名-这不起作用。我相信微软在进入2010年Interop时将其从Sub改为Function

我希望微软有更好的文档

快乐编程