如何在C#Winforms中创建嵌入式资源游标?

如何在C#Winforms中创建嵌入式资源游标?,c#,winforms,cursor,C#,Winforms,Cursor,我试图将自定义游标作为嵌入式资源添加到C#Winforms应用程序中。似乎嵌入部分没有像文档所暗示的那样工作 如果我在运行时从文件加载光标,它工作正常: myMagCursor = new Cursor("../Resources/magnify.cur"); 看来光标文件不错。我跟踪了这个信息 要嵌入光标(来自C#示例中的注释): 然后试着这样使用它: myMagCursor = new Cursor(GetType(), "magnify.cur"); this.Cursor = ne

我试图将自定义游标作为嵌入式资源添加到C#Winforms应用程序中。似乎嵌入部分没有像文档所暗示的那样工作

如果我在运行时从文件加载光标,它工作正常:

myMagCursor = new Cursor("../Resources/magnify.cur");
看来光标文件不错。我跟踪了这个信息 要嵌入光标(来自C#示例中的注释):

然后试着这样使用它:

myMagCursor = new Cursor(GetType(), "magnify.cur");
 this.Cursor = new Cursor(new System.IO.MemoryStream(Properties.Resources.arrow_i));
这会产生一个空引用异常,我假设是因为找不到资源。我也尝试过这种方法(在网上其他地方可以找到):

我试过“Piccolo.Amploy.cur”、“Piccolo.Forms.Amploy.cur”、“Piccolo.Forms.Hanger.Amploy.cur”、“Hanger.Amploy.cur”等。我推断光标没有被嵌入

光标文件位于资源文件夹中,其中包含一组.ico、.png和.jpg文件,这些文件都可以作为toolstrip按钮正常工作,并显示在项目的“Resources.resx”文件(?)中。它们都没有“嵌入式资源”属性。我的游标文件确实有“嵌入式资源”,但没有出现在“Resources.resx”中


要使光标文件正确嵌入,我缺少了什么?

我已经获得了在WPF应用程序中工作的第二种方法。不管怎样,该部分都应该工作相同,因为它们都使用相同类型的资源流。这是我成功使用的线路

canvas1.Cursor = new Cursor(Assembly.GetExecutingAssembly().GetManifestResourceStream("WpfApplication2.mallet.cur"));
最有可能的情况是,您将光标放在某种文件夹中,因此“Piccolo.放大.cur”部分是错误的。您可以做的是将所有资源流名称打印到文本框或其他地方,以查看您应该在其中放置的内容。使用以下方法完成此操作:

String[] resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames();

然后按你的选择打印出来。这将为您指明正确的方向。

对于游标,您只需执行以下操作:

using (MemoryStream ms = new MemoryStream(Properties.Resources.magnify))
{
  myMagCursor = New Cursor(ms);
}

不过,希望您不要期望看到它的颜色。

使用超负荷工作是很麻烦的。它存在着永无止境的名称空间问题。到目前为止,最好的方法是通过“项目+属性”的“资源”选项卡将光标添加为资源。单击“添加资源”按钮的箭头,添加现有文件并选择.cur文件

在运行时,您可以使用Properties.Resources.cursorname属性。返回一个字节[],用如下代码将其敲入光标:

myMagCursor = new Cursor(GetType(), "magnify.cur");
 this.Cursor = new Cursor(new System.IO.MemoryStream(Properties.Resources.arrow_i));

注意使用MemoryStream将字节[]转换为流,以便光标(流)过载工作。

+1;您还可以使用.Net Reflector或ILSpy之类的工具来查看资源是如何打包到程序集中的。如果没有这些,打印到文本框诊断将很好地工作。使用您的建议查看资源名称,我发现它在“Piccolo.Resources.放大”中。感谢这会不会导致内存泄漏,因为
MemoryStream
没有被处理?@Uwe-一些程序员坚持处理字节[]所持有的非托管资源。我不是他们中的一员。请随意按你的方式做。可能重复的