编程语言
首页 > 编程语言> > c# – 如何让Visual Studio使用我更新的NotifyIcon图标?

c# – 如何让Visual Studio使用我更新的NotifyIcon图标?

作者:互联网

我完全被这个问题困扰,我不知道该怎么办.
我使用Visual Studio 2012 Premium创建了一个简单的C#Windows窗体应用程序.我有一个小程序启动并在系统托盘中创建一个NotifyIcon.单击托盘图标时,将显示一个上下文菜单,它会显示一些菜单选项(选项,关于等),其中每个选项都显示一个表单.我通过右键单击我的项目项,属性,资源,通过参数添加了两个图标文件(.ico).我以编程方式更改了我的NotifyIcon的图标,在两个不同的图标之间交替.我的问题是我的旧图标不断显示,而不是我添加到项目中的新图标.要清楚,我的问题是OLD图标不断显示 – 一切正常,没有错误,它只显示我的最新图标.
我在代码中更改图标的方式是使用:

notifyIcon.Icon = Resources.IconA03312014; //or the other one; the numbers are the date

我最初制作了我的图标并使用了它们,后来决定稍微更改它们 – 我改变了一些颜色等等.然后我通过单击“从项目中排除”选项从项目中删除旧图标.然后我添加了我的新图标,这些图标有不同的名称.然后我更新了我的两个代码引用,加载图标以使用新名称.无论我做什么,我的新/更新图标都不会显示!

无论我是在调试版还是发布模式下在Visual Studio中运行程序,都没关系.我可以清理解决方案,重建,然后通过在Windows中单击它直接运行可执行文件,没有区别.显示旧图标.
我在线跟踪了不同的说明,解释了如何清除Windows 8图标缓存(三种不同的方法).我也使用两种不同的方法清除了缓存的通知托盘图标.

基本上,我清理了我的解决方案,然后关闭了Visual Studio.我终止所有资源管理器进程,从命令行运行ie4uinit.exe -ClearIconCache并删除IconCache.db文件.然后,我按照与这些类似的指令(http://www.sevenforums.com/tutorials/13102-notification-area-icons-reset.html)编辑注册表,删除通知图标缓存.然后我关机了.在开始备份和重建我的解决方案并运行时,旧的图标仍然存在.旧图标的物理.ico文件很久以前就被删除了.每次我向我的资源添加新图标时,我都是从头开始创建新图标文件(使用icobundl.exe)并通过在名称中包含日期来唯一地命名它们.我知道Windows,显然Visual Studio也喜欢缓存图标,如果你在Windows中删除了一些图标文件A.ico,然后将另一个图标文件B.ico重命名为A.ico,那么B.ico文件的实际图标将会换成A的.无论如何,我没有图标文件的名称是问题.

现在,在代码中,如果我使用相同的策略并设置我的表单的一个图标,它可以正常工作,表单显示我的最新图标,而我的通知图标仍显示旧的(现在不存在,除了Visual Studio la la land )图标.
所以我有:

...
if(firstState){
    notifyIcon.Icon = Resources.IconA03312014;
    optionsForm.Icon = Resources.IconA03312014;
}
else{
    notifyIcon.Icon = Resources.IconB03312014;
    optionsForm.Icon = Resources.IconB03312014;
}
firstState = !firstState;
...

没有错误以及notifyIcon和optionsForm的更改,但是通知图标显示我的OLD图标不再存在于任何地方(除了某处/某种方式在VS中).表单的图标更改为我的更新/最新图标.

如果我将我的应用程序的.exe文件复制到另一台计算机并运行它,它也会显示通知图标的旧图标,因此旧的图标仍以某种方式嵌入在我的Visual Studio生成的exe中.如果我只是直接加载.ico文件,而不是引用我的项目资源,则会显示新图标.这必须是Visual Studio中某种奇怪的资源缓存问题?

有谁可以帮我解决这个问题?我只是不明白我的旧图标是如何存在的,以及Visual Studio如何知道如何切换它们!没错,上面的图标换出适用于表单.但对于notifyIcon,图标确实从“A”切换到“B”,但它使用旧的A图标和旧的B图标 – 不再存在的图标!

我希望我已经解释了我的问题.我非常感谢任何人都能提供的任何帮助.

解决方法:

几个月前我遇到了同样的问题,这让我疯狂了几个小时.我非常专注于清除图标缓存,并认为它只是某种缓存问题,它并没有立即发生在我身上真正的问题是什么.

至少对我来说答案是:即使您的.ico文件中有16×16版本的图像,Visual Studio也会使用32×32图像并将其缩小到16×16,使其看起来扭曲.我说VS做到了,因为当我在其他机器(不同的Windows操作系统)上运行可执行文件时,我看到了相同的行为,因此对我来说这不是Windows 8问题. (这可能是一般的Windows问题,但我不知道.我没有花时间来验证生成的.exe中实际内部是什么 – 它是否包含我的16×16版本,或16×16版本生成的缩小我的32px版本?那可能已经证实了,我想……)

当我在图标的不同部分为我的图标图像的每个尺寸添加几行红色像素时,我的“啊哈”时刻到了.所以我把16×16的红色行放在底部.我的32×32在中心有红色的行,等等.然后我将这个.ico添加到我的项目并启动项目和BAM,我的32×32图标的扭曲版本在系统托盘中用作我的通知图标.毫无疑问.

如果您注意到您的通知图标(16×16)看起来比您预期的更加扭曲,您可能会使用类似的策略来查看是否发生了相同的自动缩放.当我想到这一点时,我的快速解决方案是在我的项目中添加.ico,其中仅包含我的图标图像的16×16版本.然后我将该资源图像仅用于我的通知图标.显然,如果您为表单执行此操作(只有16×16图像),例如,您会在任务栏,Alt-Tab列表等中看到一个非常扭曲的图标,因为Windows在这种情况下别无选择,只能创建不同的图标图像大小通过缩放您的16×16,因为这是您提供的所有.无论如何,在我的特殊情况下,我相信也是你的,使用.ico表示没有问题 – 它们显示了图像的实际嵌入式16×16版本,并且没有32px版本的“自动缩小”.

这是我所知道的一切.我没有在这个问题上花费更多时间,因为我不得不继续前进.我希望这有助于某些人避免一些图标挫败感.为什么,为什么,VS你会这样做给我们!?

标签:c,icons,visual-studio-2012,winforms,notifyicon
来源: https://codeday.me/bug/20190528/1174366.html