【转载】C# ListView控件的一些用法

本文系转载,原文链接http://www.liangshunet.com/ca/201309/586362553.htm

**

C# ListView控件显示表格(自适应宽度),添加 Checkbox,删除选择项,选中颜色和鼠标滑过背景变色

**
亮术网 2020-03-07 本网原创

DataGridView控件功能十分强大,显示表格也方便,但性能就没有那么高;ListView控件功能没那么强大,显示表格也要多写代码,但性能相对高一些。开发过程中,可根据需要选用;对于显示表格来说,用 ListView控件也不难,以下是两个具体实例。

一、C# Winform ListView 生成表格
1、拉一个 ListView控件到 Form1 窗口中,双击 Form1 窗口打开后台代码文件。

2、显示表格代码(固定列宽度):

  using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Text;
  using System.Windows.Forms;

namespace ShowTable
  {
    public partial class Form1 : Form
    {
      public Form1()
      {
        InitializeComponent();
      }

    private void Form1_Load(object sender, EventArgs e)
      {
        ShowTableWithListview();
      }

 

    private void ShowTableWithListview()
      {
        listView1.GridLines = true;//表格是否显示网格线
        listView1.FullRowSelect = true;//是否选中整行

      listView1.View = View.Details;//设置显示方式
        listView1.Scrollable = true;//是否自动显示滚动条
        listView1.MultiSelect = false;//是否可以选择多行

      //添加表头(列)
        listView1.Columns.Add("产品名称", 160, HorizontalAlignment.Center);
        listView1.Columns.Add("产品型号", 100, HorizontalAlignment.Center);
        listView1.Columns.Add("价格", 100, HorizontalAlignment.Center);
        listView1.Columns.Add("数量", 100, HorizontalAlignment.Center);

      //添加表格内容
        for (int i = 0; i < 6; i++)
        {
          ListViewItem item = new ListViewItem();
          item.SubItems.Clear();

        item.SubItems[0].Text = "产品" + i.ToString();
          item.SubItems.Add(i.ToString());
          item.SubItems.Add((i + 7).ToString());
          item.SubItems.Add((i * i).ToString());
          listView1.Items.Add(item);
        }
      }
    }
  }

显示表格效果如图1所示:

listView显示表格
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z5TWbdMy-1615943108366)(http://www.liangshunet.com/lsfile/computer/2013/9/du4o72v4a783551.jpg#pic_center)]

图1

3、自适应列宽度代码如下:

  using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Text;
  using System.Windows.Forms;

namespace ShowTable
  {
    public partial class Form1 : Form
    {
      public Form1()
      {
        InitializeComponent();
      }

    private void Form1_Load(object sender, EventArgs e)
      {
         ShowTableAdaptiveWidthColumn ();
      }

    private void ShowTableAdaptiveWidthColumn()
      {
        listView1.GridLines = true;//表格是否显示网格线
        listView1.FullRowSelect = true;//是否选中整行

      listView1.View = View.Details;//设置显示方式
        listView1.Scrollable = true;//是否自动显示滚动条
        listView1.MultiSelect = false;//是否可以选择多行

      //添加表头(列)
        listView1.Columns.Add("ProductName", "产品名称");
        listView1.Columns.Add("SN", "产品型号");
        listView1.Columns.Add("Price", "价格");
        listView1.Columns.Add("Number", "数量");

      //添加表格内容
        for (int i = 0; i < 3; i++)
        {
          ListViewItem item = new ListViewItem();
          item.SubItems.Clear();

        item.SubItems[0].Text = "产品" + i.ToString();
          item.SubItems.Add(i.ToString());
          item.SubItems.Add((i + 7).ToString());
          item.SubItems.Add((i * i).ToString());
          listView1.Items.Add(item);
        }

      listView1.Columns["ProductName"].Width = -1;//根据内容设置宽度
        listView1.Columns["SN"].Width = -2;//根据标题设置宽度

      listView1.Columns["Price"].Width = -2;
        listView1.Columns["Number"].Width = -2;
      }
    }
  }

效果图如图2所示:

listView表格自适应宽度
在这里插入图片描述

图2

二、C# Winform ListView 表格功能扩展
1、添加复选框(Winform listview checkbox)

需要 ListView 的 CheckBoxes 和 MultiSelect 属性设置为 True。再拖一个 CheckBox 控件到 ListView 下面,打开“属性”窗口(右键 CheckBox,然后选择“属性”),把它的 Text 属性改为“全选”;选择“事件”选项卡,在 CheckedChanged 右边添加 CbAll_CheckedChanged,按回车,添加选择改变事件。

方法一:

  private void SelectAllCheckBoxes(ListView lv, bool currVal)
  {
    for (int i = 0; i < lv.Items.Count; i++)
      lv.Items[i].Checked = currVal;
  }

方法二:

  private void SelectAllCheckBoxes(ListView lv, bool currVal)
  {
    foreach (ListViewItem item in lv.Items)
      item.Checked = currVal;
  }

调用:

  private void CbAll_CheckedChanged(object sender, EventArgs e)
  {
    SelectAllCheckBoxes(listView1, cbAll.Checked);
  }

效果图如图3所示:

添加复选框(Winform listview checkbox)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UaWj4fS8-1615943148422)(http://www.liangshunet.com/lsfile/computer/2020/3/yhuu1h8hp264134.gif#pic_center)]

图3

2、Winform listview 删除选择项

拖一个 Label 控件到 ListView 下面“全选”右边;打开“属性”窗口(右键 listView1,选择“属性”),选择“事件”选项卡,在 MouseClick 右边添加 lblDel_MouseClick 事件,再添加如下代码:

  private void lblDel_MouseClick(object sender, MouseEventArgs e)
  {
    foreach (ListViewItem item in listView1.Items)
    {
      if (item.Checked)
         item.Remove();
    }
  }

3、Winform listview 选中颜色和字体修改以突出显示

打开“属性”窗口(右键 listView1,选择“属性”),选择“事件”选项卡,在 CheckedChanged 右边添加 listView1_ItemSelectionChanged 事件,再添加如下代码:

  private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
  {
    listView1.FullRowSelect = true;

  if (this.listView1.SelectedItems.Count > 0)
    {
      //清除原有前景颜色
      foreach (ListViewItem lvi in listView1.Items)
      lvi.ForeColor = Color.Black;

    //清除原有背景颜色和字体
      foreach (ListViewItem lvi in listView1.Items)
      {
        lvi.BackColor = Color.White;
        Font font = new Font(Control.DefaultFont, FontStyle.Regular);
        lvi.Font = font;
      }

    listView1.SelectedItems[0].SubItems[0].ForeColor = Color.OrangeRed;
      Font newFont = new Font(Control.DefaultFont, FontStyle.Bold); //加粗选中行字体
      listView1.SelectedItems[0].SubItems[0].Font = newFont;

    listView1.SelectedItems[0].BackColor = Color.FromArgb(5, 206, 249, 221);//设置选中行背景颜色
      listView1.SelectedItems[0].Selected = false;
    }
  }

效果图如图4所示:

Winform listview 选中颜色和字体修改以突出显示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k1FGwN9G-1615943164534)(http://www.liangshunet.com/lsfile/computer/2020/3/4mhidd5lp900177.gif#pic_center)]

图4

4、ListView 鼠标滑过背景变色

(1)响应快的方法

打开“属性”窗口(右键 listView1,选择“属性”),选择“事件”选项卡,在 MouseMove 右边添加 listView1_MouseMove 事件,再添加如下代码:

  private void listView1_MouseMove(object sender, MouseEventArgs e)
  {
    ListView lv = (ListView)sender;
    ListViewItem oldItem = null;
    if (lv.Tag != null)
      oldItem = (ListViewItem)lv.Tag;

  ListViewItem curItem = lv.GetItemAt(e.X, e.Y);//获取鼠标所在的项
    if (curItem != null)
    {
      // 还原鼠标上次所在项的背景颜色
      if (oldItem != null && oldItem != curItem)
        oldItem.BackColor = lv.BackColor;

    curItem.BackColor = Color.LightGreen;//设置当前项的背景颜色
      lv.Tag = curItem;
    }
    else
    {
      if (oldItem != null && oldItem.BackColor != lv.BackColor)
        oldItem.BackColor = lv.BackColor;
    }
  }

效果图如图5所示:

C# Winform ListView 鼠标滑过背景变色

图52)响应慢的方法

同样在 ItemMouseHover 右边添加 listView1_ItemMouseHover 事件,再添加如下代码:

ListViewItem lastSelectedItem = null;
  private void listView1_ItemMouseHover(object sender, ListViewItemMouseHoverEventArgs e)
  {
    if (lastSelectedItem != null)
      lastSelectedItem.BackColor = Color.White;
      
    e.Item.BackColor = Color.LightGreen;
    lastSelectedItem = e.Item;
  }

5、ListView 行高设置

设置方法请看《C# listview行高设置完整实例》一文,里面有详细介绍。

以上代码通过 Visual Studio 2019 测试,可直接复到文件运行看效果。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值