我在C#中有一个Windows控制台应用程序,可用作电话簿。我在应用程序设置菜单图标的行中遇到Missing Directives错误,例如:
cmsProgramMenu.Items.Add("&Settings", Properties.Resources.phone_receiver.ToBitmap(), OnSettings_Click);
完整错误为'object' does not contain a definition for 'ToBitmap' and no extension method 'ToBitmap' accepting a first argument of type 'object' could be found (are you missing a using directive or assembly reference?)
。
我在网上和SO上搜索过,我见过的所有指令都已包含在我的代码中,但错误仍然存在。这些是我拥有的:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;
using System.Data;
using System.Windows.Media.Imaging;
我还缺少另一个吗?或者是否有另一种将图像转换为位图的方法?我在Visual Studio 2015中工作。
答案 0 :(得分:2)
问题是Properties.Resources.phone_receiver
的类型为Object
,而错误消息显示Object
没有名为ToBitmap
的方法。如果您确定它是Icon
(您的代码建议它是),那么您可以执行以下操作:
((Icon)Properties.Resources.phone_receiver).ToBitmap()
这显式地将Properties.Resources.phone_receiver
强制转换为Icon
,然后编译器知道它可以在其上调用ToBitmap
方法。
答案 1 :(得分:2)
如果您在资源窗口(项目属性/资源)中将图标添加为“图标”,则它将被输入为Icon
。对System.Drawing
的引用就足够了,ToBitmap
将出现在IntelliSense中。
但是,如果您将资源添加为“图片”,那么它已经被输入为Bitmap
,并且根本不需要调用ToBitmap()
。
不需要任何类型的铸造!
如果你在代码编辑器中浏览“phone_receiver”,将出现一个工具提示并显示资源的类型:
hover the mouse here | V
答案 2 :(得分:0)
Bitmap myBitmap = new Bitmap(Properties.Resources.phone_receiver); cmsProgramMenu.Items.Add(“& Settings”,myBitmap,OnSettings_Click);