我有一个 WinForms 应用程序。我已经在项目设置中设置了可执行文件的图标(至少具有 16x16 和 32x32 格式),它成功地显示在资源管理器和其他地方的 .exe 文件中。
如何将此图标设置为表单的图标(Form.Icon
属性或其他)?它可以用在左侧表单的标题中,并将用于在任务栏中显示表单。
据我所知,System.Drawing.Icon
不能用多种图标格式创建,但是..当用户的任务栏启用了“小图标”时,任务栏的图标应该是16x16。当禁用此选项时,它应该是 32x32。如果图标大小错误,窗口会缩放它,看起来会很糟糕。
Icon.ExtractAssociatedIcon
只给我一种格式 (32x32)。 P/Invoking ExtractIconEx
为我提供了两种格式(16x16 和 32x32),但我无法将其组合在一个 System.Drawing.Icon
实例中以设置为 Form。图标
。
当然,我可以使用 .ico 文件中的表单属性设置图标,但它会给我资源重复:一个图标作为可执行文件的图标存储在 PE 中,另一个作为 .NET 资源存储。
同样,问题是:我应该使用什么设置来使 exe 的图标成为表单的图标,并在任何任务栏设置中正常工作?
最佳答案
Windows 和 .Net 中的默认图标处理例程似乎无法很好地从模块中提取多尺寸图标。 Icon
class 有一个棘手的用法,它从一个图标文件中提取所有数据,然后只使用一种尺寸,你可以创建一个新的 Icon
来自原始 Icon
的对象对于不同的大小,它将共享数据并提取最接近的大小。不幸的是,没有真正包含轻松处理多尺寸图标的方法。
这里的代码可以让您从 Code Project 中做您想做的事情,这些代码正是为您的目的而编写的:将 EXE 文件中的多尺寸图标分配给您的表单。
Assigning an applications icon to all the forms in the application
将库添加到项目后,您只需分配单例属性 HostIcon
到您的表格的 icon
属性:
this.icon = Cliver.IconRoutines.HostIcon;
关于c# - 什么图标应该设置为表单的图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48194094/