表单应该设置哪个图标作为图标?

3
我有一个WinForms应用程序。我已经在项目设置中设置了可执行文件的图标(至少16x16和32x32格式),它成功地显示在资源管理器和其他地方的.exe文件中。
我如何将此图标设置为窗体的图标(Form.Icon属性或其他属性)?它可以在窗体左侧的标题栏中使用,并且将用于在任务栏中显示窗体。
据我所知,System.Drawing.Icon无法使用多个图标格式创建,但是...当用户启用了“小图标”选项时,任务栏的图标应该是16x16。当禁用此选项时,它应为32x32。如果图标大小错误,Windows会对其进行缩放,看起来很糟糕。
Icon.ExtractAssociatedIcon只给我一个格式(32x32)。 P/Invoking ExtractIconEx会给我两个格式(16x16和32x32),但我无法将其组合在一个System.Drawing.Icon实例中以设置为Form.Icon。
当然,我可以使用.ico文件从窗体属性设置图标,但这将导致资源重复:一个图标存储在PE中作为可执行文件的图标,另一个图标存储为.NET资源。
再次,请问:我应该使用什么设置使exe的图标成为窗体的图标,并在任何任务栏设置下正常工作?

使用像IcoFX这样的程序,确保您将所有位数和尺寸的图标放入一个单一文件中。然后,一旦将图标设置为表单图标,它就会在任务栏图标中使用相同的图标,并相应地进行调整,而无需进行任何操作。 - Franck
我确定我的.ico文件是正确的。在.NET中,如何将该图标设置到窗体中而不重复存储在资源中? - rattler
在项目资源中转到图标选项卡并在那里添加您的图标。然后在表单中,只需单击图标属性并从资源列表中选择您的图标即可。 - Franck
@Franck,正如我在问题帖子中所说的那样,这将导致资源重复。这是不期望的。 - rattler
你的可执行文件图标应该有多种格式(16x16、32x32、64x64和256x256)。将这个多尺寸图标用于所有内容。有在线服务可以将PNG、JPG等位图转换为多格式图标。搜索“图标转换器”或类似工具。 - Jimi
1个回答

0

在Windows和.Net中,似乎默认的图标处理例程不能很好地从模块中提取多尺寸图标。 Icon类的使用有些棘手,它会从图标文件中提取所有数据,然后仅使用一个大小,并且您可以从原始Icon创建一个新的Icon对象以获取不同的大小,它将共享数据并提取最接近的大小。不幸的是,没有包括易于使用多尺寸图标的方法。

这里是来自Code Project的代码,可以让您按照您的目的进行编写:将EXE文件中的多尺寸图标分配给您的表单。

将应用程序的图标分配给应用程序中的所有表单

一旦将库添加到项目中,您只需将单例属性HostIcon分配给表单的icon属性即可:

this.icon = Cliver.IconRoutines.HostIcon;

“Icon.GetAssociatedIcon” 只能提取 32x32 格式的图标,但我需要两种格式都有。 - rattler
1
我猜你的意思是 Icon.ExtractAssociatedIcon - NetMage
糟糕,是的,我不得不复制粘贴而不是手写 :) - rattler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接