Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VS 2013 SDK:如何设置命令按钮图片?_C#_.net_Vb.net_Visual Studio_Visual Studio Sdk - Fatal编程技术网

C# VS 2013 SDK:如何设置命令按钮图片?

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

在阅读了Carlos Quintero在中的C#答案之后,接下来我读了他的C#文章,我尝试按照上面提到的步骤设置菜单按钮的
命令按钮。图片
,但是,当我这样做时,任何图像都会出现,软件包不会抛出任何错误,只是图像未显示(可能未正确加载或格式不正确?)

以下是我试图设置的图像:

这就是我正在使用的代码,我遗漏了什么或做错了什么

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