首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C# Winforms中创建嵌入式资源光标?

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

Stack Overflow用户
提问于 2011-08-18 01:36:41
回答 3查看 8.4K关注 0票数 4

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

如果我在运行时从文件加载游标,它工作得很好:

代码语言:javascript
复制
myMagCursor = new Cursor("../Resources/magnify.cur");

所以看起来光标文件是好的。我在MSDN上遵循以下信息嵌入了光标(来自C#示例中的注释):

代码语言:javascript
复制
//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"

然后尝试这样使用它:

代码语言:javascript
复制
myMagCursor = new Cursor(GetType(), "magnify.cur");

这会给出一个空引用异常,我假设是因为找不到资源。我也尝试了这种方法(在web上的其他地方可以找到):

代码语言:javascript
复制
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‘中。

为了正确嵌入游标文件,我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-18 01:53:59

我已经获得了在WPF应用程序中工作的第二种方法。无论如何,这部分应该是相同的,因为它们都使用相同类型的资源流。这是我曾经成功使用过的一行代码。

代码语言:javascript
复制
canvas1.Cursor = new Cursor(Assembly.GetExecutingAssembly().GetManifestResourceStream("WpfApplication2.mallet.cur"));

最有可能的情况是,您将光标放在某种文件夹中,因此"Piccolo.magnify.cur“部分是错误的。您可以做的是将所有资源流名称打印到文本框或其他地方,以查看您应该放在那里的确切内容。要实现这一点,请使用以下命令:

代码语言:javascript
复制
String[] resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames();

然后按您选择的方式打印出来。这应该会给你指明正确的方向。

票数 7
EN

Stack Overflow用户

发布于 2011-08-18 02:04:30

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

代码语言:javascript
复制
using (MemoryStream ms = new MemoryStream(Properties.Resources.magnify))
{
  myMagCursor = New Cursor(ms);
}

不过,希望你不要期望看到它是彩色的。

票数 5
EN

Stack Overflow用户

发布于 2011-08-18 02:10:17

获取你工作时使用的超载是很麻烦的。它有永无止境的命名空间问题。到目前为止,最好的方法是通过Project + Properties,resources选项卡添加光标作为资源。单击Add Resource按钮的箭头,Add Existing file并选择.cur文件。

在运行时,可以使用Properties.Resources.cursorname属性。它返回一个byte[],你可以像这样把它放入一个游标中:

代码语言:javascript
复制
 this.Cursor = new Cursor(new System.IO.MemoryStream(Properties.Resources.arrow_i));

请注意,使用MemoryStream将byte[]转换为流,以使游标(流)重载工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7097044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档