我完全被這個問題難住,我不知道該怎麼做。 我已經使用Visual Studio 2012 Premium創建了一個簡單的C#Windows窗體應用程序。我有一個小程序啓動並在系統托盤中創建一個NotifyIcon。點擊托盤圖標後,會顯示一個上下文菜單,並顯示幾個菜單選項(選項,關於等),其中每個選項顯示一個表單。我通過右鍵單擊我的項目項目,屬性,資源,添加了兩個圖標文件(.ico)。我以編程方式更改我的NotifyIcon的圖標,在兩個不同的圖標之間交替。我的問題是我的舊圖標繼續顯示,而不是我添加到項目中的新圖標。要清楚,我的問題是老圖標不斷顯示 - 一切正常,沒有錯誤,它只是不顯示我最新的圖標。 我改變了代碼中的圖標的方法是使用:如何讓Visual Studio爲我的NotifyIcon使用我更新的圖標?
notifyIcon.Icon = Resources.IconA03312014; //or the other one; the numbers are the date
我開始了我的圖標,並使用這些後來決定改變他們一點點 - 我改變了一些顏色,等於是我通過單擊「從項目排除」選項從我的項目中刪除舊圖標。然後我添加了我的新圖標,它們有不同的名稱。然後我更新了兩個加載圖標的代碼引用以使用新名稱。無論我做什麼,我的新/更新的圖標都不顯示!
無論我在Debug或Release模式下在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's。無論如何,我沒有圖標文件的名稱是問題。現在,在代碼中,如果我使用相同的策略並設置其中一個窗體的圖標,它將正常工作,窗體顯示我最新的圖標,而我的通知圖標仍然顯示舊的(現在不存在,除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的變化,但通知圖標顯示不再存在任何地方(除地方/在某種程度上VS)我的舊圖標。表格的圖標更改爲我更新/最新的圖標。
如果我將應用程序的.exe文件複製到另一臺計算機並運行它,它也會顯示通知圖標的舊圖標,因此舊圖標仍以某種方式仍嵌入到由Visual Studio生成的exe文件中。如果我直接加載.ico文件,而不是引用我的項目資源,則會顯示新的圖標。這必須是Visual Studio中某種奇怪的資源緩存問題?
任何人都可以請幫我解決這個問題嗎?我只是不明白我的舊圖標是如何存在的,以及Visual Studio如何知道如何切換它們!沒錯,上面的圖標互換完美適用於表單。但對於notifyIcon,圖標確實從「A」切換到「B」,但它使用舊的A圖標和舊的B圖標 - 不再存在於任何位置的圖標!
我希望我已經解釋了我的問題。我非常感謝任何人都可以提供的幫助。
哇,謝謝先生!就是這樣!多麼奇怪的問題......如果沒有你的幫助,我永遠都不會想到這件事! – user3487286
如果你認爲這是一個很好的答案,請給它一個upvote。我當然這樣做,因爲這非常有幫助。 – Anthony