C# VS 2013 SDK:如何设置命令按钮图片?
在阅读了Carlos Quintero在中的C#答案之后,接下来我读了他的C#文章,我尝试按照上面提到的步骤设置菜单按钮的C# VS 2013 SDK:如何设置命令按钮图片?,c#,.net,vb.net,visual-studio,visual-studio-sdk,C#,.net,Vb.net,Visual Studio,Visual Studio Sdk,在阅读了Carlos Quintero在中的C#答案之后,接下来我读了他的C#文章,我尝试按照上面提到的步骤设置菜单按钮的命令按钮。图片,但是,当我这样做时,任何图像都会出现,软件包不会抛出任何错误,只是图像未显示(可能未正确加载或格式不正确?) 以下是我试图设置的图像: 这就是我正在使用的代码,我遗漏了什么或做错了什么 Friend Sub CreateMenu(ByVal dte As EnvDTE80.DTE2) Dim objImageToPictureDispConve
命令按钮。图片
,但是,当我这样做时,任何图像都会出现,软件包不会抛出任何错误,只是图像未显示(可能未正确加载或格式不正确?)
以下是我试图设置的图像:
这就是我正在使用的代码,我遗漏了什么或做错了什么
Friend Sub CreateMenu(ByVal dte As EnvDTE80.DTE2)
Dim objImageToPictureDispConverter As ImageToPictureDispConverter = Nothing
Dim objImage As System.Drawing.Image = Nothing
Dim objIPictureDisp As stdole.IPictureDisp = Nothing
objImage = System.Drawing.Image.FromFile("C:\path to resources...\Menu_Tag_Green.png")
objImageToPictureDispConverter = New ImageToPictureDispConverter
objIPictureDisp = objImageToPictureDispConverter.GetIPictureDispFromImage(objImage)
objImageToPictureDispConverter.Dispose()
' Get a reference to the context menu of code window.
Dim codeWindowCommandBar As CommandBar =
DirectCast(dte.CommandBars, CommandBars)("Code Window")
' Add a popup command bar.
Dim mainPopup As CommandBarPopup =
DirectCast(codeWindowCommandBar.Controls.Add(MsoControlType.msoControlPopup,
Type.Missing, Type.Missing,
Type.Missing, Type.Missing), CommandBarPopup)
mainPopup.Caption = "..."
' Add controls to the popup command bar.
BtMakeCodeExample =
DirectCast(mainPopup.Controls.Add(MsoControlType.msoControlButton,
Missing.Value, Missing.Value,
1, True), CommandBarButton)
BtMakeCodeExample.Caption = "My Button"
BtMakeCodeExample.Style = MsoButtonStyle.msoButtonIcon
BtMakeCodeExample.Picture = objIPictureDisp
End Sub
+
解决方案非常简单,只需将
CommandBarButton
的Style
属性设置为MsoButtonStyle.msobuttonAndCaption
而不是MsoButtonStyle.msoButtonIcon
如果要创建包,则应使用.vsct文件创建用户界面,它允许您声明命令图片。请参见谢谢,但我没有使用创建vsct文件的命令菜单模板(我在其他问题中解释了原因)。你认为我做错了,我应该使用那个模板,而不是像我现在使用的那样使用一个空模板?。我只想“管理”代码编辑器菜单中的内容。我们将在“VS 2013 SDK:如何在CommandBarPopup菜单中添加行分隔符?”线程中继续讨论
Public Class ImageToPictureDispConverter : Inherits System.Windows.Forms.AxHost
Public Sub New()
MyBase.New("{63109182-966B-4e3c-A8B2-8BC4A88D221C}")
End Sub
Public Function GetIPictureDispFromImage(ByVal objImage As System.Drawing.Image) As stdole.IPictureDisp
Dim objPicture As stdole.IPictureDisp
objPicture = CType(System.Windows.Forms.AxHost.GetIPictureDispFromPicture(objImage), stdole.IPictureDisp)
Return objPicture
End Function
End Class