在另一个类中调用过程

时间:2011-12-12 20:53:34

标签: vb.net outlook add-in

我为outlook 2010创建了一个加载项。我有一个带有按钮的功能区。单击该按钮时,我希望它调用ThisAddIn.vb中的过程。

有两个文件:ThisAddin.vb和Ribbon.vb。

我尝试了几件事无济于事。我还将所有程序都设置为公开。

致电测试123()

调用ThisAddIn.Testing123()

如何正确调用此程序?

****Ribbon1.vb****
Imports Microsoft.Office.Tools.Ribbon


Public Class MyOutlookTab

    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles Button1.Click

        Call Testing123()

    End Sub

End Class


***ThisAddIn.vb***
Public Class ThisAddIn

    Public Sub Testing123()
        System.Windows.Forms.MessageBox.Show("It Works!")

    End Sub

End Class

3 个答案:

答案 0 :(得分:3)

问题在于您尝试在不创建类的情况下引用类方法。

您可以使用以下三种方法:

1)将ThisAddIn转换为Module。然后,在您访问Testing123方法时不会出现任何问题。

2)将ThisAddin.Testing123转换为Shared方法,即:

Public Shared Sub Testing123()

然后您将按如下方式访问:

Call ThisAddin.Testing123()

3)在使用其方法之前创建ThisAddIn类的实例:

Dim oAddIn As New ThisAddIn
Call oAddIn.Testing123()

<强>更新

看来,addins的处理方式与标准类不同。

This MSDN article包含从其他类型的解决方案访问AddIn功能的具体实施指南。

根据这篇文章,您需要采取一些额外的步骤:

1)创建一个界面以公开AddIn的功能:

<ComVisible(True)> _
Public Interface IAddInUtilities
    Sub Testing123()
End Interface

2)在你的插件项目中添加一个实用程序类:

<ComVisible(True)> _
<ClassInterface(ClassInterfaceType.None)> _
Public Class AddInUtilities
    Implements IAddInUtilities

    Public Sub Testing123() Implements IAddInUtilities.Testing123
        System.Windows.Forms.MessageBox.Show("It Works!")
    End Sub
End Class

3)将以下内容添加到ThisAddIn以将实用程序公开给外部调用者:

Private utilities As AddInUtilities

Protected Overrides Function RequestComAddInAutomationService() As Object
    If utilities Is Nothing Then
        utilities = New AddInUtilities()
    End If
    Return utilities
End Function

4)由于我没有在办公室安装自动化系统,我对最后一步所需的确切语法有点不清楚,但你需要按照以下几点做一些事情:

' OutlookTest should be changed to the name of the project ThisAddIn is in
Dim addIn As Office.COMAddIn = Globals.ThisAddIn.Application.COMAddIns.Item("OutlookTest")
Dim utilities As OutlookTest.IAddInUtilities = TryCast( _
    addIn.Object, OutlookTest.IAddInUtilities)
utilities.Testing123()

答案 1 :(得分:2)

感谢大家的评论,但我在这里找到了一个示例中的解决方案:http://msdn.microsoft.com/en-us/library/ee620548.aspx,他们谈到在会议请求中添加功能区(2/3)。

实际上非常简单。您使用“全局”

调用该过程
Globals.ThisAddIn.Testing123()

不需要其他任何东西。

答案 2 :(得分:1)

您必须先创建该类的新实例,然后才能在vb.net中调用它。

所以应该允许你调用它..

Public Class MyOutlookTab

    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles Button1.Click
        Dim testing As New ThisAddIn()
        Call testing.Testing123()

    End Sub

End Class