簡體   English   中英

在圖片框中顯示圖標時出錯

[英]Error showing Icon in picturebox

我一直在使用此代碼在圖片框中顯示圖標。

Image FromIcon(Icon ico)
{
    try
    {
        this.toolTip1.SetToolTip(pictureBox1, "The icon of the Executable");
        return ico.ToBitmap();
    }
    catch (Exception e)
    {
        this.toolTip1.SetToolTip(pictureBox1, "Don't worry, it looks perfectly fine on the executable!");
        MessageBox.Show(e.Message + "\r\n" + e.StackTrace);
        Clipboard.SetText(e.Message + "\r\n" + e.StackTrace);

        // Alternate method             
        return Bitmap.FromHicon(ico.Handle);
    }
}

但是,它顯示此錯誤。

Requested range extends past the end of the array.
   at System.Runtime.InteropServices.Marshal.CopyToNative(Object source, Int32 startIndex, IntPtr destination, Int32 length)
   at System.Runtime.InteropServices.Marshal.Copy(Byte[] source, Int32 startIndex, IntPtr destination, Int32 length)
   at System.Drawing.Icon.ToBitmap()

此外,該圖標還會以討厭的方式顯示,

在此處輸入圖片說明

那是我在應用程序中使用的相同圖標。 有什么問題嗎?

該圖標與其他圖標一樣為32位。

在此處輸入圖片說明

如果我使用另一個圖標,它可以正常工作,並且不會彈出錯誤。

在此處輸入圖片說明

我知道這是一個老問題,但是最近我遇到了同一問題,因此我想將解決方案發布給其他面臨相同問題的人。

對我來說,問題是我正在從PNG圖像格式創建ICO文件,但該文件用於的應用程序針對的是.NET框架,該框架早於4.6(即在中添加了對PNG框架的支持的版本)。 ico文件)。 請參見下面的Icon.ToBitmap()文檔中的注釋:

從框架版本4.6開始,已為.ico文件中的PNG框架添加了支持。 通過將以下行添加到app.config文件的<runtime>部分,可以將針對早期版本框架但運行在4.6位上的應用程序選擇加入新行為:<AppContextSwitchOverrides value =“ Switch.System.Drawing .DontSupportPngFramesInIcons = false“ />

因此,一旦將上述行添加到app.config文件中,它就解決了該問題。

暫無
暫無

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

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