簡體   English   中英

我在 ListView 中動態添加的圖像顯示為黑色方塊,Windows 窗體

[英]Images I dinamically added in a ListView are displaying as a black square, Windows Forms

在通過我存儲在 SQL Server 數據庫中的數據填充 ListView 時,無論我如何解決這個問題,我試圖填充的 imageList 都不會顯示圖像,而是顯示一個黑色方塊,實際圖像應該在那里.

我已經嘗試了所有圖像列表類型和列表視圖上的視圖類型,但它們都以相同的方式失敗。

這是我嘗試填充它的方式:

public ListView List_Of_Albums(ListView LV)
    {
        LV.Clear();
        LV.Columns.Add("Album Name", 233);
        LV.View = View.Details;
        ImageList imgs = new ImageList();
        LV.SmallImageList = imgs;
        LV.BringToFront();
        imgs.ImageSize = new Size(108, 93);
        LV.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        try
        {
            ConexionDB();
            SqlCommand cmd = new SqlCommand("spSelect_Albums", cnx);
            cmd.Connection = cnx;
            cmd.CommandType = CommandType.StoredProcedure;
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    string[] row =
                    {
                        dr.GetValue(2).ToString(),
                        dr.GetValue(0).ToString(),
                        dr.GetValue(1).ToString(),
                        dr.GetValue(3).ToString(),
                        dr.GetValue(4).ToString(),
                        dr.GetValue(5).ToString(),
                        dr.GetValue(6).ToString(),
                        dr.GetValue(7).ToString(),
                        dr.GetValue(8).ToString(),
                        dr.GetValue(9).ToString()
                    };
                    try
                    {
                        imgs.Images.Add(Image.FromFile(dr.GetValue(4).ToString()));
                    }
                    catch (Exception)
                    {
                        imgs.Images.Add(Properties.Resources.No_Art);
                    }
                    var LVItem = new ListViewItem(row);
                    LV.Items.Add(LVItem);
                }
            }
            cnx.Close();
            return LV;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString(), "Database execution error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return LV;
        }
    }

然而結果總是這樣:

在此處輸入圖片說明

我已經確認用作路徑的字符串是有效的,如果我將一個垃圾字符串作為源,它確實會給我一個找不到的文件。

你設置了 LVI 的圖像索引了嗎? – TaW

就是這樣,非常感謝,如果有人有類似的問題,這就是我通過使用上面在我的示例中使用的相同 while 循環來分配圖像索引的方式。

public ListView List_Of_Albums(ListView LV)
    {
        int imgCount = 0; // HERE
        LV.Clear();
        LV.Columns.Add("Album Name", 333);
        LV.View = View.LargeIcon;
        ImageList imgs = new ImageList();
        LV.LargeImageList = imgs;
        LV.BringToFront();
        imgs.ImageSize = new Size(108, 93);
        LV.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        try
        {
            ConexionDB();
            SqlCommand cmd = new SqlCommand("spSelect_Albums", cnx);
            cmd.Connection = cnx;
            cmd.CommandType = CommandType.StoredProcedure;
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    string[] row =
                    {
                        dr.GetValue(2).ToString(),
                        dr.GetValue(0).ToString(),
                        dr.GetValue(1).ToString(),
                        dr.GetValue(3).ToString(),
                        dr.GetValue(4).ToString(),
                        dr.GetValue(5).ToString(),
                        dr.GetValue(6).ToString(),
                        dr.GetValue(7).ToString(),
                        dr.GetValue(8).ToString(),
                        dr.GetValue(9).ToString()
                    };
                    var LVItem = new ListViewItem(row);
                    LV.Items.Add(LVItem);
                    try
                    {
                        imgs.Images.Add(Image.FromFile(dr.GetValue(4).ToString()));
                        LV.Items[imgCount].ImageIndex = imgCount; //counts up
                    }
                    catch (Exception)
                    {
                        imgs.Images.Add(Properties.Resources.No_Art); // no image if it can't find one
                        LV.Items[imgCount].ImageIndex = -1;
                    }
                    imgCount++;
                }
            }
            cnx.Close();
            return LV;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString(), "Database execution error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return LV;
        }
    }

暫無
暫無

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

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