查看: 17  |  回复: 0
  VB.Net VSTO外接程序项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制
楼主
发表于 2025年3月30日 17:50

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

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

Imports Microsoft.Office.Core
Public Class ThisAddIn

    Private Sub ThisAddIn_Startup() Handles Me.Startup
        CreateCTP()
    End Sub

    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
        DisposeCTP()
    End Sub
    Protected Overrides Function CreateRibbonExtensibilityObject() As IRibbonExtensibility
        Return New Ribbon1()
    End Function
End Class

<System.Runtime.InteropServices.ComVisible(True)>
Public Class Ribbon1
    Implements IRibbonExtensibility
    Public R As IRibbonUI
    Public Function GetCustomUI(RibbonID As String) As String Implements IRibbonExtensibility.GetCustomUI
        Dim xml As XElement
        xml = <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoad">
                  <ribbon startFromScratch="false">
                      <tabs>
                          <tab id="Tab1" label="RibbonXmlEditor">
                              <group id="Group1" label="Author:ryueifu">
                                  <button id="Button1" label="CTP" imageMso="C" onAction="Button1_Click"/>
                                  <button id="Button2" label="UnLoad" imageMso="U" onAction="Button2_Click"/>
                              </group>
                          </tab>
                      </tabs>
                  </ribbon>
              </customUI>
        Return xml.ToString()
    End Function
    Public Sub OnLoad(ribbon As IRibbonUI)
        R = ribbon
        R.ActivateTab(ControlID:="Tab1")
    End Sub
    Public Sub Button1_Click(control As IRibbonControl)
        ctp.Visible = Not ctp.Visible
    End Sub
    Public Sub Button2_Click(control As IRibbonControl)
        Dim ThisCOM As COMAddIn
        ThisCOM = Globals.ThisAddIn.Application.COMAddIns.Item(Index:=My.Application.Info.AssemblyName)
        ThisCOM.Connect = False
    End Sub
End Class

Public Module Module1
    Public uc As System.Windows.Forms.UserControl
    Public ctp As Microsoft.Office.Tools.CustomTaskPane
    Public Sub CreateCTP()
        uc = New Windows.Forms.UserControl
        ctp = Globals.ThisAddIn.CustomTaskPanes.Add(control:=uc, title:="CTP")
        With ctp
            .DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight
            .Visible = True
        End With
    End Sub
    Public Sub DisposeCTP()
        ctp.Dispose()
    End Sub
End Module


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2025 MaNongKu.com