首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >响应VB.Net中的多个VSTO上下文菜单

响应VB.Net中的多个VSTO上下文菜单
EN

Stack Overflow用户
提问于 2017-10-04 12:44:57
回答 1查看 166关注 0票数 1

正在尝试使用VB.Net构建VSTO。我问过了,一定是VB.Net。

以EXCEL为目标的应用程序级加载项

我的挑战是尝试构建一个具有不确定数量的子项的上下文菜单。

我可以制作菜单,但我目前只让onClick触发最后一个按钮。

我已经对此进行了相当彻底的研究,但我找不到一个VB示例。在VB中有很多添加简单上下文菜单的示例。

在C#中有一些示例,但您可以这样做

代码语言:javascript
复制
 cb.Click += cbButton_Clicked;

我还没有弄清楚如何在VB中做到这一点,因此出现了这个问题。完整的代码如下所示。我可以点击前5个按钮中的任何一个,但没有任何反应。当我单击最后一个时,它会像预期的那样触发一个消息框。

我将有一个不确定的菜单项数量,所以我不能仅仅添加X#处理程序。

代码语言:javascript
复制
Public Class ThisAddIn
 Dim WithEvents cb As CommandBarButton
    Dim TradeName As String = "MyMenu"
    Private Sub ThisAddIn_Startup() Handles Me.Startup

        ' AddHandler Application.WorkbookBeforeSave, AddressOf Application_WorkbookBeforeSave

        AddHandler Application.NewWorkbook, AddressOf ThisWorkbook_NewWorkbook

    End Sub


    Private Sub ThisWorkbook_NewWorkbook(wb As Microsoft.Office.Interop.Excel.Workbook)

        AddMenu2()
    End Sub



    Public Function GetCellContextMenu() As Office.CommandBar

        Return Application.CommandBars("Cell")
    End Function


    Public Sub AddMenu2()
        Dim Bar As Microsoft.Office.Core.CommandBar
        Dim NewControl As Microsoft.Office.Core.CommandBarControl

        Try

            Application.CommandBars("Cell").Controls(TradeName).Delete()
        Catch ex As Exception

        End Try


        Bar = Application.CommandBars("Cell")
        NewControl = Bar.Controls.Add(Microsoft.Office.Core.MsoControlType.msoControlPopup, Id:=1, Temporary:=True)

        With NewControl
            .Caption = TradeName
            .BeginGroup = True
            .TooltipText = TradeName & " Queries."
        End With

        Dim ag As New fvConnectionSuperAg
        Dim l As List(Of fvConnection) = ag.Items

        For Each conn As fvConnection In l

            cb = NewControl.Controls.Add(Microsoft.Office.Core.MsoControlType.msoControlButton)
            With cb
                .Caption = conn.Name.Value
                .FaceId = 218
                   ' HERE IS WHERE  I THINK I SHOULD CONNECT THE HANDLER 
            End With

下一步

代码语言:javascript
复制
    End Sub

    Private Sub cb_Click(Ctrl As CommandBarButton, ByRef CancelDefault As Boolean) Handles cb.Click
        MsgBox(Ctrl.Caption, MsgBoxStyle.ApplicationModal, "Fast View")
    End Sub
End Class
EN

回答 1

Stack Overflow用户

发布于 2017-10-04 23:34:18

永远不会失败,发布这样的帖子会让你澄清头脑中的问题,这通常会导致答案……

我在这篇讨论以编程方式添加事件处理程序的文章中找到了答案。与VSTO没有任何关系。

http://www.thescarms.com/dotnet/EventHandler.aspx

这是之前发布的不同之处的摘录,在创建按钮后立即调用ADDHANDLER

代码语言:javascript
复制
 cb = NewControl.Controls.Add (Microsoft.Office.Core.MsoControlType.msoControlButton)
            AddHandler cb.Click, AddressOf cb_Click
            With cb
                .Caption = conn.Name.Value
                .FaceId 
            End With
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46557192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档