【问题标题】:Any easy way to use icons from resources?有什么简单的方法可以使用资源中的图标吗?
【发布时间】:2011-08-05 03:15:34
【问题描述】:

我有一个 C# 应用程序。我需要向该应用程序添加一个图标,所以我添加了一个图标资源。添加资源很好,但是有没有办法使用我的(资源)图标作为表单图标而不添加额外的代码?当我尝试使用表单的设计时“图标”属性时,似乎我必须选择一个文件,但我想使用嵌入式图标...

有什么帮助吗?

【问题讨论】:

标签: c# forms resources icons


【解决方案1】:
  1. 将图标添加到项目资源中并重命名为图标。

  2. 打开要添加图标的表单的设计器。

  3. 附加 InitializeComponent 函数。

  4. 在顶部添加这一行:

    this.Icon = PROJECTNAME.Properties.Resources.icon;
    

    对项目中要更新的任何表单重复第 4 步

【讨论】:

  • 感谢@Moudi 的回答——这是要走的路!如果您在应用程序中多次使用资源(即图标、图像),如果按照您在此处描述的方式嵌入,它将减小应用程序的文件大小!
  • 这感觉像是正确的解决方案,但它也破坏了设计师。将代码添加到 InitializeComponent 函数后,尝试打开设计器会显示错误“方法 'InitializedComponent' 中的代码是由设计器生成的,不应手动修改。有任何解决此问题的建议吗?
  • @Aerankas 可以在表单的Load事件中添加同一行,而不是放入InitializeComponent,效果是一样的。
  • 您也可以在调用InitializeComponent 之后将其包含在表单构造函数中
  • 有时不能直接设置图片,例如API。我需要设置一个绝对完整路径。有没有办法获取资源路径(不写任何字符串以避免丢失构建完成和丢失检测)?
【解决方案2】:

我如何加载图标: 使用 Visual Studio 2010:进入项目属性,点击 Add Resource > Existing File,选择您的图标。

您会看到一个资源文件夹出现了。这是我的问题,我必须单击加载的图标(在资源目录中),并将“复制到输出目录”设置为 “始终复制”。 (设置为“请勿复制”)。

现在只需这样做:

Icon myIcon = new Icon("Resources/myIcon.ico");

【讨论】:

  • 唉,我正在尝试这样做以解决打开我的设计视图的问题,但我仍然得到;找不到路径“C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\DocuityConfig\MyApp.ico”的一部分。
  • 如果从文件中加载图标,添加为资源毫无意义,只会增加可执行文件/程序集的大小。从文件加载的另一个问题是您必须单独部署所有文件。请注意,最终用户将能够通过覆盖文件轻松替换外部资源。
  • 你不应该这样做。每次调用 new Icon(..) 都会增加 GDI+ 缓存。更好的是使用一个实例并引用它,特别是如果您需要绑定一定数量的项目。
  • 这不起作用,也不做任何事情。您从未将图标分配给 this.Icon 并且如上所述还有其他问题。
  • 如果图标不存在,您的应用会崩溃吗?
【解决方案3】:

选择该文件,会将图标嵌入到可执行文件中。

【讨论】:

    【解决方案4】:

    表单维护通过设计器添加的单独资源文件 (SomeForm.Designer.resx)。要使用嵌入在另一个资源文件中的图标,需要代码。 (this.Icone = Project.Resources.SomeIcon;)

    【讨论】:

      【解决方案5】:

      将 ICO 文件添加到您的应用程序资源后,您可以使用 My.Resources.YourIconNameWithoutExtension 引用它

      例如,如果我有一个名为 Logo-square.ico 的文件添加到我的应用程序资源中,我可以将其设置为一个图标:

      NotifyIcon1.Icon = My.Resources.Logo_square
      

      【讨论】:

        【解决方案6】:

        在 Visual Studio for vb.net 中,转到项目属性,单击添加资源 > 现有文件,选择您的图标。

        在您的代码中: Me.Icon = My.Resources.IconResourceName

        【讨论】:

          【解决方案7】:

          Form_Load:

          this.Icon = YourProjectNameSpace.Resources.YourResourceName.YouAppIconName;

          【讨论】:

          • 这个答案比莫迪的答案好多少?
          • 我发现它是Properties.Resources.AppIconYourProjectNamespace.Properties.Resources.AppIconNotifyIcon1.Icon = My.Resources.Logo_square 虽然我个人并没有像那样设置图标,但我只是将通知图标拖到那里然后单击小箭头并设置图标..有一个很好的视频系统托盘图标,Windows窗体c#中的NotifyIcon控件示例由winforms youtube.com/watch?v=tCHOdDzUFIY
          【解决方案8】:

          你也可以在没有额外尺寸的情况下使用它

          this.Icon = Icon.ExtractAssociatedIcon(AppDomain.CurrentDomain.FriendlyName);

          【讨论】:

            猜你喜欢
            • 2011-12-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-06
            • 2011-12-23
            • 1970-01-01
            • 1970-01-01
            • 2012-10-29
            相关资源
            最近更新 更多