我正在尝试将自定义光标作为嵌入式资源添加到C# Winforms应用程序中。似乎嵌入部分并没有像文档所暗示的那样工作。
如果我在运行时从文件加载游标,它工作得很好:
myMagCursor = new Cursor("../Resources/magnify.cur");所以看起来光标文件是好的。我在MSDN上遵循以下信息嵌入了光标(来自C#示例中的注释):
//In Visual Studio:
// 1. Select the cursor file in the Solution Explorer
// 2. Choose View->Properties.
// 3. In the properties window switch "Build Action" to "Embedded"然后尝试这样使用它:
myMagCursor = new Cursor(GetType(), "magnify.cur");这会给出一个空引用异常,我假设是因为找不到资源。我也尝试了这种方法(在web上的其他地方可以找到):
namespace Piccolo.Forms
{
public partial class Hanger
{
...
Assembly asm = Assembly.GetExecutingAssembly();
using( Stream resStream = asm.GetManifestResourceStream("Piccolo.magnify.cur") )
{
myMagCursor = new Cursor( resStream );
}我试过"Piccolo.magnify.cur","Piccolo.Forms.magnify.cur","Piccolo.Forms.Hanger.magnify.cur","Hanger.magnify.cur“等,我推断光标没有被嵌入。
光标文件位于资源文件夹中,其中包含一堆.ico、.png和.jpg文件,这些文件都可以作为工具条按钮正常工作,并显示在'Resources.resx‘文件(?)中。在项目中。它们都没有"Embedded Resource“属性。我的光标文件有"Embedded Resource",但没有出现在'Resources.resx‘中。
为了正确嵌入游标文件,我遗漏了什么?
发布于 2011-08-18 01:53:59
我已经获得了在WPF应用程序中工作的第二种方法。无论如何,这部分应该是相同的,因为它们都使用相同类型的资源流。这是我曾经成功使用过的一行代码。
canvas1.Cursor = new Cursor(Assembly.GetExecutingAssembly().GetManifestResourceStream("WpfApplication2.mallet.cur"));最有可能的情况是,您将光标放在某种文件夹中,因此"Piccolo.magnify.cur“部分是错误的。您可以做的是将所有资源流名称打印到文本框或其他地方,以查看您应该放在那里的确切内容。要实现这一点,请使用以下命令:
String[] resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames();然后按您选择的方式打印出来。这应该会给你指明正确的方向。
发布于 2011-08-18 02:04:30
对于游标,您只需执行以下操作:
using (MemoryStream ms = new MemoryStream(Properties.Resources.magnify))
{
myMagCursor = New Cursor(ms);
}不过,希望你不要期望看到它是彩色的。
发布于 2011-08-18 02:10:17
获取你工作时使用的超载是很麻烦的。它有永无止境的命名空间问题。到目前为止,最好的方法是通过Project + Properties,resources选项卡添加光标作为资源。单击Add Resource按钮的箭头,Add Existing file并选择.cur文件。
在运行时,可以使用Properties.Resources.cursorname属性。它返回一个byte[],你可以像这样把它放入一个游标中:
this.Cursor = new Cursor(new System.IO.MemoryStream(Properties.Resources.arrow_i));请注意,使用MemoryStream将byte[]转换为流,以使游标(流)重载工作。
https://stackoverflow.com/questions/7097044
复制相似问题