ImageList控件(3)

《C#入门经典(第5版)》第15章Windows编程基础,本章介绍创建Windows应用程序时最常用的一些控件,并讨论如何使用它们创建简单而强大的用户界面。还论述这些控件的属性和事件,列出了使用它们的示例,解释了如何为控件的特定事件添加处理程序。本节为大家介绍ImageList控件。

15.8.6  ImageList控件(3)

代码段Chapter15\ListView\Form1.cs.

示例的说明

在第一个foreach块中,对ListView控件调用了BeginUpdate()。ListView控件上的BeginUpdate()方法告诉ListView控件,停止更新其可见区域,直到调用了EndUpdate()为止。如果没有调用这个方法,列表视图的填充就会进行得更加缓慢,列表可能在填充选项时闪烁。在第二个foreach块的后面调用了EndUpdate(),就可以使ListView控件显示出填充到它里面的内容。

这两个foreach块包含了我们感兴趣的代码。首先创建ListViewItem的一个新实例,再把Text属性设置为要插入的文件名或文件夹名。ListViewItem的ImageIndex表示其中一个ImageList中的选项索引。所以两个ImageList中的图标有相同的索引是非常重要的。使用Tag属性保存文件夹和文件的完全限定路径,在用户双击选项时,将使用该路径。

然后创建两个子选项,将要显示的文本赋给这两个子选项,再把它们添加到ListViewItem的SubItems集合中。

最后,把ListViewItem添加到ListView的Items集合中。ListView非常聪明,知道如果视图模式不是Details,就应忽略子选项。所以,现在无论视图模式是什么,都可以增加子选项。

注意代码的某些方面没有讨论,即实际获取文件信息的代码行:

 
 
  1.       // Get information about the root folder.  
  2.       DirectoryInfo dir = new DirectoryInfo(root);  
  3. // Retrieve the files and folders from the root folder.  
  4.       DirectoryInfo[] dirdirs = dir.GetDirectories();  
  5.       FileInfo[] files = dir.GetFiles(); 

这些代码使用System.IO名称空间中的类访问文件,所以需要在代码顶部的using区域添加如下代码:

 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Windows.Forms;  
  7. using System.IO; 

第24章将详细介绍文件访问和System.IO名称空间,但现在应明白,DirectoryInfo对象上的GetDirectories()方法返回一个对象集合,它们表示所查看的目录下的文件夹,GetFiles()方法返回一个对象集合,它们表示当前目录下的文件。可以迭代这些集合,如上面的代码所示,使用对象的Name属性返回相关目录或文件的名称,创建一个ListViewItem来保存这个字符串。

剩下的就是列表视图应显示根文件夹,为此,在窗体的构造函数中调用两个函数。同时用根文件夹实例化folderCol StringCollection字符串集合:

 
 
  1. InitializeComponent();  
  2.  
  3. folderCol = new System.Collections.Specialized.StringCollection();  
  4. CreateHeadersAndFillListView();  
  5. PaintListView(@"C:\");  
  6. folderCol.Add(@"C:\"); 

为了允许用户通过双击ListView中的选项来浏览文件夹,需要订阅ItemActivate事件。在设计器中选择ListView,在Properties窗口的Events列表中双击ItemActivate事件。

对应的事件处理程序如下所示:

 
 
  1. private void listViewFilesAndFolders_ItemActivate(object 
    sender, EventArgs e)  
  2. {  
  3.    System.Windows.Forms.ListView lw = 
    (System.Windows.Forms.ListView)sender;  
  4.    string filename = lw.SelectedItems[0].Tag.ToString();  
  5.  
  6.    if (lw.SelectedItems[0].ImageIndex != 0)  
  7.    {  
  8.       try  
  9.       {  
  10.          System.Diagnostics.Process.Start(filename);  
  11.       }  
  12.       catch {return;}  
  13.    }  
  14.    else  
  15.    {  
  16.       PaintListView(filename);  
  17.       folderCol.Add(filename);  
  18.    }} 

选中项的Tag包含被双击的文件或文件夹的完全限定路径。索引为0的图像是一个文件夹,所以查看索引就可以确定哪个选项是文件,哪个选项是文件夹。如果选项是一个文件,就试着加载它。如果选项是一个文件夹,就通过新文件夹调用PaintListView(),再把新文件夹添加到folderCol集合中。

在讨论单选按钮前,先给Back按钮添加Click事件,提供完整的浏览功能。双击该按钮,为事件处理程序添加如下代码:

 
 
  1. private void buttonBack_Click(object sender, EventArgs e)  
  2. {  
  3.    if (folderCol.Count > 1)  
  4.    {  
  5.       PaintListView(folderCol[folderCol.Count-2].ToString());  
  6.       folderCol.RemoveAt(folderCol.Count-1);  
  7.    }  
  8.    else  
  9.       PaintListView(folderCol[0].ToString());  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ImageList 控件是 C# 中常用的控件之一,它通常用于存储和管理图像资源,以便在程序中方便地使用。ImageList 控件可以用于在其他控件中显示图像,比如 ListView、TreeView、ComboBox、ToolBar 等控件。在这些控件中,我们可以使用 ImageList 控件来存储和管理图像,并在需要的时候将它们显示在控件中。 ImageList 控件的主要作用如下: 1. 存储和管理图像资源:ImageList 控件可以用于存储和管理程序中使用的图像资源。我们可以在 ImageList 控件中添加多个图像,并为每个图像指定一个键值,以便在程序中方便地引用它们。 2. 提高程序的性能:使用 ImageList 控件可以提高程序的性能。因为在使用 ImageList 控件显示图像时,实际上是将图像从 ImageList 控件中获取,而不是每次都从磁盘或网络中读取图像文件。这样可以减少程序的 IO 操作,从而提高程序的性能。 3. 方便地在其他控件中显示图像:ImageList 控件可以用于在其他控件中显示图像。例如,在 ListView 控件中,我们可以使用 ImageList 控件来为每个列表项指定一个图标。这样可以使得程序界面更加美观和易于使用。 总之,ImageList 控件是 C# 中常用的控件之一,它可以用于存储和管理图像资源,并方便地在其他控件中显示图像。使用 ImageList 控件可以提高程序的性能,同时使程序界面更加美观和易于使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值