一旦可用于可执行文件和表单,我如何包含一个图标?

时间:2017-06-14 19:19:51

标签: c# winforms embedded-resource ico

我正在尝试为应用程序可执行文件和应用程序内的表单使用单个.ico文件(具有多种大小),而不会在可执行文件中包含两次图标。

我注意到了这一点,因为我的应用程序(没有图标)是600KB编译的,图标是300KB,但当我使用时,应用程序增加到1200KB编译,表明它被嵌入两次。

这是我尝试过的:

(1)使用UI

选择图标文件
  1. 转到应用程序属性>申请>资源>图标并使用“...”按钮选择MyIcon.ico文件。
    • 编译的exe现在是900KB
  2. 转到表单属性>图标并使用“...”按钮选择MyIcon.ico文件。
    • 编译的exe现在是1200KB
  3. (2)使用资源

    1. 转到应用程序属性>资源>图标>添加现有文件并选择MyIcon.ico文件
    2. 在表单构造函数中,添加:this.Icon = Properties.Resources.MyIcon;
      • 编译的exe现在是900KB
    3. 转到应用程序属性>申请>资源>图标,然后选择Resources\MyIcon.ico(在下拉列表中列出)
      • 编译的exe现在是1200KB
    4. 显然,它仍然是第二次包含该文件,而不是引用嵌入式资源。

      (3)使用Icon.ExtractAssociatedIcon()

      1. 转到应用程序属性>申请>资源>图标并使用“...”按钮选择MyIcon.ico文件。
        • 编译的exe现在是900KB
      2. 在表单构造函数中,添加this.Icon = Icon.ExtractAssociatedIcon(AppDomain.CurrentDomain.FriendlyName);
        • 编译的exe仍然是900KB,但icon是Windows的通用“exe”图标,而不是我的应用程序的图标
      3. 在我深入研究之前,我是否遗漏了一些明显的东西?有没有标准的方法来做到这一点?我只是没有正确使用Icon.ExtractAssociatedIcon()吗?

2 个答案:

答案 0 :(得分:1)

对不起,这是我的疏忽。方法(3)确实有效。

我是从VisualStudio调试器运行的,但没有注意到.vshost.exe文件有一个不同的图标 - 这就是表单中显示的内容。

当直接使用编译的exe时,它可以正常工作。

答案 1 :(得分:0)

在项目中添加必要的图标后,您必须做两件事:

  1. 选择表格,然后在“属性”中选择“图标”属性中的该图标。
  2. 转到项目的属性,然后在图标字段中选择相同的图标。
  3. 在构建项目时,您将在任何地方看到必要的图标。

    <强>更新 抱歉没有完整答案,我们走了: 你是对的,它创建了两次,第一个是ico文件本身,第二个是Form.resx文件中的base64字符串,当你在第一步中添加ico时生成。那么,如何解决呢?

    首先转到InitializeComponent()方法,使用.Icon字符串并将其更改为以下

    this.Icon = new Icon(Path.GetDirectoryName(Application.ExecutablePath) + "../../../[YOUR ICO FILE NAME].ico");
    

    ,然后删除自动生成的Form.resx文件。 这里的Icon对象是System.Drawing.Icon。我设置的文件名,例如,你看到它是* .sln文件旁边的ico。在实际情况中,它将不会转到父文件夹。