首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# WinForms ListView 控件圖片顯示完整指南

     編輯:關於C語言

概述

在 Windows Forms 應用中,ListView 控件常用於以圖標、列表、詳細信息等視圖展示數據。若要在每一行前顯示圖標或縮略圖,核心在於配合 ImageList 組件使用。本文將通過「拖放控件 → 配置屬性 → 綁定圖片索引」四步走流程,並附贈完整代碼範例,幫助你快速掌握 ListView 圖片顯示技巧。

四步完成圖片綁定

步驟 1:拖放所需控件

在 Visual Studio 設計器中,從工具箱分別拖入:

  • ListView(命名為 listView1)
  • ImageList(命名為 imageList1)

步驟 2:向 ImageList 添加圖片資源

  1. 選中 imageList1,在屬性窗口找到 Images 屬性,點擊「...」按鈕打開集合編輯器。
  2. 點擊「添加」,依次選擇你想顯示的圖片文件(支持 .bmp、.png、.jpg、.ico 等格式)。
  3. 確定後,圖片將按添加順序自動分配索引(0、1、2…)。

步驟 3:將 ImageList 關聯到 ListView

選中 listView1,設置以下三個屬性均指向 imageList1:

  • SmallImageList:用於「詳細信息」、「列表」、「小圖標」視圖
  • LargeImageList:用於「大圖標」視圖
  • StateImageList:用於複選框、選中狀態等額外圖標(可選)

步驟 4:為列表項指定 ImageIndex

在設計器中編輯 listView1 的 Items 集合,或在代碼中動態添加項時,設置每個 ListViewItem 的 ImageIndex 屬性為對應圖片的索引值:

var item = new ListViewItem("文檔標題");
item.ImageIndex = 0; // 顯示 imageList1 中第 1 張圖片
listView1.Items.Add(item);

運行程序,切換 View 屬性(View.Details、View.LargeIcon 等),即可看到圖片正確顯示在每行最前方。

完整代碼範例:動態添加帶圖標的項目並去重

下方示例演示:用戶在文本框輸入文字,點擊按鈕後將內容作為新行添加到 ListView,並自動分配圖標索引;若內容重複則提示並取消添加。

private void btnAdd_Click(object sender, EventArgs e)
{
    if (string.IsNullOrWhiteSpace(txtInput.Text))
    {
        MessageBox.Show("添加的內容不能為空");
        txtInput.Focus();
        return;
    }

    string newText = txtInput.Text.Trim();

    // 檢查是否已存在相同文本(不區分大小寫)
    foreach (ListViewItem existingItem in listView1.Items)
    {
        if (string.Equals(existingItem.Text, newText, StringComparison.OrdinalIgnoreCase))
        {
            MessageBox.Show("項目重複,不能添加!");
            txtInput.Clear();
            txtInput.Focus();
            return;
        }
    }

    // 新建項目並指定圖標索引(此處循環使用 0-2 三個圖標演示)
    int iconIndex = listView1.Items.Count % imageList1.Images.Count;
    var newItem = new ListViewItem(newText) { ImageIndex = iconIndex };
    listView1.Items.Add(newItem);

    txtInput.Clear();
    txtInput.Focus();
}

進階技巧與常見坑點

場景解決方案
圖片顯示模糊或變形 確保 ImageList.ImageSize 與源圖片尺寸一致(默認 16×16),或預先將圖片縮放至目標尺寸再加入。
大圖標視圖無圖片 檢查 LargeImageList 是否已正確指向同一 ImageList,且源圖片尺寸適合大圖標模式(通常 32×32 或 48×48)。
動態加載大量圖片導致 UI 卡頓 採用「虛擬模式」(VirtualMode = true)配合 RetrieveVirtualItem 事件,按需加載圖標索引而非一次性載入所有圖片。
不同行顯示不同圖標 根據業務邏輯(如文件類型、狀態)動態計算 ImageIndex,或使用 ListViewItem.StateImageIndex 顯示次要狀態圖標。

總結

ListView 顯示圖片的核心在於 ImageList 組件作為圖片容器,再通過 SmallImageList/LargeImageList 屬性橋接到 ListView,最後在 ListViewItem.ImageIndex 指定具體圖標。掌握這一機制後,你可以輕鬆實現文件管理器風格的圖標列表、帶狀態圖標的任務清單等豐富界面。結合虛擬模式與異步圖片加載,還能應對大數據量場景,保證界面流暢響應。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved