正在尝试使用VB.Net构建VSTO。我问过了,一定是VB.Net。
以EXCEL为目标的应用程序级加载项
我的挑战是尝试构建一个具有不确定数量的子项的上下文菜单。
我可以制作菜单,但我目前只让onClick触发最后一个按钮。
我已经对此进行了相当彻底的研究,但我找不到一个VB示例。在VB中有很多添加简单上下文菜单的示例。
在C#中有一些示例,但您可以这样做
cb.Click += cbButton_Clicked;我还没有弄清楚如何在VB中做到这一点,因此出现了这个问题。完整的代码如下所示。我可以点击前5个按钮中的任何一个,但没有任何反应。当我单击最后一个时,它会像预期的那样触发一个消息框。
我将有一个不确定的菜单项数量,所以我不能仅仅添加X#处理程序。
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下一步
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发布于 2017-10-04 23:34:18
永远不会失败,发布这样的帖子会让你澄清头脑中的问题,这通常会导致答案……
我在这篇讨论以编程方式添加事件处理程序的文章中找到了答案。与VSTO没有任何关系。
http://www.thescarms.com/dotnet/EventHandler.aspx
这是之前发布的不同之处的摘录,在创建按钮后立即调用ADDHANDLER。
cb = NewControl.Controls.Add (Microsoft.Office.Core.MsoControlType.msoControlButton)
AddHandler cb.Click, AddressOf cb_Click
With cb
.Caption = conn.Name.Value
.FaceId
End Withhttps://stackoverflow.com/questions/46557192
复制相似问题