VSTO外接程序项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【VB.Net版】

VSTO中的自定义功能区和自定义任务窗格需要用到各种命名空间、添加所需文件,才能实现。后来我发现可以把所有代码都写在ThisAddin.vb这个默认文件中。

大家可以在Visual Studio中创建一个外接程序项目,然后把ThisAddin.vb中的代码整体替换为下面我贴的这个代码。然后启动调试,就可以看到自定义功能区和任务窗格了。

 1 Imports Microsoft.Office.Core
 2 Public Class ThisAddIn
 3 
 4     Private Sub ThisAddIn_Startup() Handles Me.Startup
 5         CreateCTP()
 6     End Sub
 7 
 8     Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
 9         DisposeCTP()
10     End Sub
11     Protected Overrides Function CreateRibbonExtensibilityObject() As IRibbonExtensibility
12         Return New Ribbon1()
13     End Function
14 End Class
15 
16 <System.Runtime.InteropServices.ComVisible(True)>
17 Public Class Ribbon1
18     Implements IRibbonExtensibility
19     Public R As IRibbonUI
20     Public Function GetCustomUI(RibbonID As String) As String Implements IRibbonExtensibility.GetCustomUI
21         Dim xml As XElement
22         xml = <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoad">
23                   <ribbon startFromScratch="false">
24                       <tabs>
25                           <tab  label="RibbonXmlEditor">
26                               <group  label="Author:ryueifu">
27                                   <button  label="CTP" imageMso="C" onAction="Button1_Click"/>
28                                   <button  label="UnLoad" imageMso="U" onAction="Button2_Click"/>
29                               </group>
30                           </tab>
31                       </tabs>
32                   </ribbon>
33               </customUI>
34         Return xml.ToString()
35     End Function
36     Public Sub OnLoad(ribbon As IRibbonUI)
37         R = ribbon
38         R.ActivateTab(ControlID:="Tab1")
39     End Sub
40     Public Sub Button1_Click(control As IRibbonControl)
41         ctp.Visible = Not ctp.Visible
42     End Sub
43     Public Sub Button2_Click(control As IRibbonControl)
44         Dim ThisCOM As COMAddIn
45         ThisCOM = Globals.ThisAddIn.Application.COMAddIns.Item(Index:=My.Application.Info.AssemblyName)
46         ThisCOM.Connect = False
47     End Sub
48 End Class
49 
50 Public Module Module1
51     Public uc As System.Windows.Forms.UserControl
52     Public ctp As Microsoft.Office.Tools.CustomTaskPane
53     Public Sub CreateCTP()
54         uc = New Windows.Forms.UserControl
55         ctp = Globals.ThisAddIn.CustomTaskPanes.Add(control:=uc, title:="CTP")
56         With ctp
57             .DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight
58             .Visible = True
59         End With
60     End Sub
61     Public Sub DisposeCTP()
62         ctp.Dispose()
63     End Sub
64 End Module