簡體   English   中英

如何讓Visual Studio使用我更新的NotifyIcon圖標?

[英]How can I make Visual Studio use my updated icon for my 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文件中有16x16版本的圖像,Visual Studio也會使用32x32圖像並將其縮小到16x16,使其看起來扭曲。 我說VS做到了,因為當我在其他機器(不同的Windows操作系統)上運行可執行文件時,我看到了相同的行為,因此對我來說這不是Windows 8問題。 (這可能是一般的Windows問題,但我不知道。我沒有花時間來驗證生成的.exe中實際內部是什么 - 它是否包含我的16x16版本,或16x16版本生成的縮小我的32px版本?那可能已經證實了,我想......)

當我在圖標的不同部分為我的圖標圖像的每個尺寸添加幾行紅色像素時,我的“啊哈”時刻到了。 所以我把16x16的紅色行放在底部。 我的32x32在中心有紅色的行,等等。然后我將這個.ico添加到我的項目並啟動項目和BAM,我的32x32圖標的扭曲版本在系統托盤中用作我的通知圖標。 毫無疑問。

如果您注意到您的通知圖標(16x16)看起來比您預期的更加扭曲,您可能會使用類似的策略來查看是否發生了相同的自動縮放。 當我想到這一點時,我的快速解決方案是在我的項目中添加.ico,其中僅包含我的圖標圖像的16x16版本。 然后我將該資源圖像僅用於我的通知圖標。 顯然,如果您為表單執行此操作(只有16x16圖像),例如,您會在任務欄,Alt-Tab列表等中看到一個非常扭曲的圖標,因為Windows在這種情況下別無選擇,只能創建不同的圖標圖像大小通過縮放您的16x16,因為這是您提供的所有。 無論如何,在我的特殊情況下,我相信也是你的,使用.ico表示沒有問題 - 它們顯示了圖像的實際嵌入式16x16版本,並且沒有32px版本的“自動縮小”。

這是我所知道的一切。 我沒有在這個問題上花費更多時間,因為我不得不繼續前進。 我希望這有助於某些人避免一些圖標挫敗感。 為什么,為什么,VS你會這樣做給我們!?

我在啟動畫面時遇到了同樣的問題。 一些如何在更換圖片后沒有改變。

我做的是刪除圖像然后保存表格。 運行應用程序,沒有圖像。 然后我換了他們,問題就解決了。 所以也許你可以嘗試同樣的圖標。 希望它能解決你的問題。

使用編輯器打開項目的Resources.resx文件。 你必須將name="Icon1"更改為name="YourIconName"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM