狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【C#】LISTVIEW控件:文件/目錄增加圖標顯示實例

admin
2021年3月11日 1:55 本文熱度 2673

說明:本例將目錄中的文件顯示在窗體的ListView控件中,并定義了多種視圖瀏覽。通過調用Win32庫函數實現圖標數據的提取

主程序:


大圖標:



列表:



詳細信息:


Form1.cs:

1.  public partial class Form1 : Form

2.      {

3.          FileInfoList fileList;

4.   

5.   

6.          public Form1()

7.          {

8.              InitializeComponent();

9.          }

10.

11.

12.        private void 加載文件ToolStripMenuItem_Click(object sender, EventArgs e)

13.        {

14.            FolderBrowserDialog dlg = new FolderBrowserDialog();

15.            if (dlg.ShowDialog() == DialogResult.OK)

16.            {

17.                string[] filespath = Directory.GetFiles(dlg.SelectedPath);

18.                fileList = new FileInfoList(filespath);

19.                InitListView();

20.            }

21.        }

22.

23.

24.        private void InitListView()

25.        {

26.            listView1.Items.Clear();

27.            this.listView1.BeginUpdate();

28.            foreach (FileInfoWithIcon file in fileList.list)

29.            {

30.                ListViewItem item = new ListViewItem();

31.                item.Text = file.fileInfo.Name.Split('.')[0];

32.                item.ImageIndex = file.iconIndex;

33.                item.SubItems.Add(file.fileInfo.LastWriteTime.ToString());

34.                item.SubItems.Add(file.fileInfo.Extension.Replace(".",""));

35.                item.SubItems.Add(string.Format(("{0:N0}"), file.fileInfo.Length));

36.                listView1.Items.Add(item);

37.            }

38.            listView1.LargeImageList = fileList.imageListLargeIcon;

39.            listView1.SmallImageList = fileList.imageListSmallIcon;

40.            listView1.Show();

41.            this.listView1.EndUpdate();

42.        }

43.

44.

45.        private void 大圖標ToolStripMenuItem_Click(object sender, EventArgs e)

46.        {

47.            listView1.View = View.LargeIcon;

48.        }

49.

50.

51.        private void 小圖標ToolStripMenuItem_Click(object sender, EventArgs e)

52.        {

53.            listView1.View = View.SmallIcon;

54.        }

55.

56.

57.        private void 平鋪ToolStripMenuItem_Click(object sender, EventArgs e)

58.        {

59.            listView1.View = View.Tile;

60.        }

61.

62.

63.        private void 列表ToolStripMenuItem_Click(object sender, EventArgs e)

64.        {

65.            listView1.View = View.List;

66.        }

67.

68.

69.        private void 詳細信息ToolStripMenuItem_Click(object sender, EventArgs e)

70.        {

71.            listView1.View = View.Details;

72.        }

73.       }


FileInfoList.cs:

說明:主要用于后臺數據的存儲

1.  class FileInfoList

2.      {

3.          public List<FileInfoWithIcon> list;

4.          public ImageList imageListLargeIcon;

5.          public ImageList imageListSmallIcon;

6.   

7.   

8.          /// <summary>

9.          /// 根據文件路徑獲取生成文件信息,并提取文件的圖標

10.        /// </summary>

11.        /// <param name="filespath"></param>

12.        public FileInfoList(string[] filespath)

13.        {

14.            list = new List<FileInfoWithIcon>();

15.            imageListLargeIcon = new ImageList();

16.            imageListLargeIcon.ImageSize = new Size(3232);

17.            imageListSmallIcon = new ImageList();

18.            imageListSmallIcon.ImageSize = new Size(1616);

19.            foreach (string path in filespath)

20.            {

21.                FileInfoWithIcon file = new FileInfoWithIcon(path);

22.                imageListLargeIcon.Images.Add(file.largeIcon);

23.                imageListSmallIcon.Images.Add(file.smallIcon);

24.                file.iconIndex = imageListLargeIcon.Images.Count - 1;

25.                list.Add(file);

26.            }

27.        }

28.    }

29.    class FileInfoWithIcon

30.    {

31.        public FileInfo fileInfo;

32.        public Icon largeIcon;

33.        public Icon smallIcon;

34.        public int iconIndex;

35.        public FileInfoWithIcon(string path)

36.        {

37.            fileInfo = new FileInfo(path);

38.            largeIcon = GetSystemIcon.GetIconByFileName(path, true);

39.            if (largeIcon == null)

40.                largeIcon = GetSystemIcon.GetIconByFileType(Path.GetExtension(path), true);

41.

42.

43.            smallIcon = GetSystemIcon.GetIconByFileName(path, false);

44.            if (smallIcon == null)

45.                smallIcon = GetSystemIcon.GetIconByFileType(Path.GetExtension(path), false);

46.        }

47.    }

 

GetSystemIcon:

說明:定義兩種圖標獲取方式,從文件提取和從文件關聯的系統資源中提取。

1.  public static class GetSystemIcon

2.      {

3.          /// <summary>

4.          /// 依據文件名讀取圖標,若指定文件不存在,則返回空值。 

5.          /// </summary>

6.          /// <param name="fileName">文件路徑</param>

7.          /// <param name="isLarge">是否返回大圖標</param>

8.          /// <returns></returns>

9.          public static Icon GetIconByFileName(string fileName, bool isLarge = true)

10.        {

11.            int[] phiconLarge = new int[1];

12.            int[] phiconSmall = new int[1];

13.            //文件名 圖標索引

14.            Win32.ExtractIconEx(fileName, 0, phiconLarge, phiconSmall, 1);

15.            IntPtr IconHnd = new IntPtr(isLarge ? phiconLarge[0] : phiconSmall[0]);

16.           

17.            if (IconHnd.ToString() == "0")

18.                return null;

19.            return Icon.FromHandle(IconHnd);

20.        }

21.

22.

23.        /// <summary> 

24.        /// 根據文件擴展名(如:.*),返回與之關聯的圖標。

25.        /// 若不以"."開頭則返回文件夾的圖標。 

26.        /// </summary> 

27.        /// <param name="fileType">文件擴展名</param> 

28.        /// <param name="isLarge">是否返回大圖標</param> 

29.        /// <returns></returns> 

30.        public static Icon GetIconByFileType(string fileType, bool isLarge)

31.        {

32.            if (fileType == null || fileType.Equals(string.Empty)) return null;

33.

34.

35.            RegistryKey regVersion = null;

36.            string regFileType = null;

37.            string regIconString = null;

38.            string systemDirectory = Environment.SystemDirectory + "\\";

39.

40.

41.            if (fileType[0] == '.')

42.            {

43.                //讀系統注冊表中文件類型信息 

44.                regVersion = Registry.ClassesRoot.OpenSubKey(fileType, false);

45.                if (regVersion != null)

46.                {

47.                    regFileType = regVersion.GetValue(""as string;

48.                    regVersion.Close();

49.                    regVersion = Registry.ClassesRoot.OpenSubKey(regFileType + @"\DefaultIcon"false);

50.                    if (regVersion != null)

51.                    {

52.                        regIconString = regVersion.GetValue(""as string;

53.                        regVersion.Close();

54.                    }

55.                }

56.                if (regIconString == null)

57.                {

58.                    //沒有讀取到文件類型注冊信息,指定為未知文件類型的圖標 

59.                    regIconString = systemDirectory + "shell32.dll,0";

60.                }

61.            }

62.            else

63.            {

64.                //直接指定為文件夾圖標 

65.                regIconString = systemDirectory + "shell32.dll,3";

66.            }

67.            string[] fileIcon = regIconString.Split(new char[] { ',' });

68.            if (fileIcon.Length != 2)

69.            {

70.                //系統注冊表中注冊的標圖不能直接提取,則返回可執行文件的通用圖標 

71.                fileIcon = new string[] { systemDirectory + "shell32.dll""2" };

72.            }

73.            Icon resultIcon = null;

74.            try

75.            {

76.                //調用API方法讀取圖標 

77.                int[] phiconLarge = new int[1];

78.                int[] phiconSmall = new int[1];

79.                uint count = Win32.ExtractIconEx(fileIcon[0], Int32.Parse(fileIcon[1]), phiconLarge, phiconSmall, 1);

80.                IntPtr IconHnd = new IntPtr(isLarge ? phiconLarge[0] : phiconSmall[0]);

81.                resultIcon = Icon.FromHandle(IconHnd);

82.            }

83.            catch { }

84.            return resultIcon;

85.        }

86.    }

87.

88.

89.    /// <summary> 

90.    /// 定義調用的API方法 

91.    /// </summary> 

92.    class Win32

93.    {

94.        [DllImport("shell32.dll")]

95.        public static extern uint ExtractIconEx(string lpszFile, int nIconIndex, int[] phiconLarge, int[] phiconSmall, uint nIcons);

96.    } 


該文章在 2021/3/11 1:55:41 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved