C# 在功能区中使用.ico图像
我有一个c#加载项,它有一个自定义功能区,但是,我没有按钮的图像。我没有.bmp文件,只有.ico文件。如果可能的话,最好不要转换任何东西C# 在功能区中使用.ico图像,c#,xml,excel,ribbonx,C#,Xml,Excel,Ribbonx,我有一个c#加载项,它有一个自定义功能区,但是,我没有按钮的图像。我没有.bmp文件,只有.ico文件。如果可能的话,最好不要转换任何东西 功能区是通过xml创建的, 不是visual studio功能区设计器,来自和: 在“代码隐藏”中,设置图像: customButton1.Image = new Icon("icon.ico").ToBitmap(); 完成这项工作有两种可能的方法。MSDN中的文章中描述了这两种情况: 元素的loadImage属性使您能够指定可以加载所有图像的回调。
功能区是通过xml创建的, 不是visual studio功能区设计器,来自和: 在“代码隐藏”中,设置图像:
customButton1.Image = new Icon("icon.ico").ToBitmap();
完成这项工作有两种可能的方法。MSDN中的文章中描述了这两种情况:
public stdole.IPictureDisp GetImage(string imageName)
{
return
PictureConverter.IconToPictureDisp(Properties.Resources.MyIcon);
}
public stdole.IPictureDisp GetImageCallback(IRibbonControl control)
{
return
PictureConverter.IconToPictureDisp(Properties.Resources.MyIcon);
}
getImage回调方法必须返回stdole.IPictureDisp类型,因此通常需要将图像转换为该类型。要执行这些转换,可以使用以下PictureConverter类,该类继承自AxHost类
internal class PictureConverter : AxHost
{
private PictureConverter() : base(String.Empty) { }
static public stdole.IPictureDisp ImageToPictureDisp(Image image)
{
return (stdole.IPictureDisp)GetIPictureDispFromPicture(image);
}
static public stdole.IPictureDisp IconToPictureDisp(Icon icon)
{
return ImageToPictureDisp(icon.ToBitmap());
}
static public Image PictureDispToImage(stdole.IPictureDisp picture)
{
return GetPictureFromIPicture(picture);
}
}
例如,回调可能如下所示:
public stdole.IPictureDisp GetImage(string imageName)
{
return
PictureConverter.IconToPictureDisp(Properties.Resources.MyIcon);
}
public stdole.IPictureDisp GetImageCallback(IRibbonControl control)
{
return
PictureConverter.IconToPictureDisp(Properties.Resources.MyIcon);
}
选择哪种方式取决于您。谢谢,我已经尝试过了,但是每个答案都只涉及.bmp文件,没有一个是这么简单的。我修复了您可能会提到的问题。现在似乎找不到该文件,即使它包含在解决方案中。而且我也不确定我最初是否清楚,我不喜欢在编码时使用设计器,因此ribbon是用xml手工编码的