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

本文转载自:http://www.liangshunet.com/ca/201309/586362553.htm

亮术网 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显示表格

图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所示:

 

图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 选中颜色和字体修改以突出显示

图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 鼠标滑过背景变色

图5

 

(2)响应慢的方法

同样在 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 测试,可直接复到文件运行看效果。

第1章 页面特效 1.1 HTML页面反向显示 1.2 页面自动最大化 1.3 页面自动刷新 1.4 页面的后退、刷新、前进 1.5保护网页源代码 1.6 保护自己的网页不被放入框架 1.7 保护自己的网页不被放入框架 1.8 打印页面的出错原因 1.9 当前网页调用其他网页 1.10 倒计时载入页面 1.11 定义网页的关键字 1.12 进入页面同时弹出欢迎对话框 1.13 禁止网页另存 1.14 禁止页面加入缓存 1.15 离开页面时弹出对话框 1.16 判断页面是否添加了W3C声明 1.17 屏蔽网页中的脚本 1.18 以频道模式打开页面 1.19 自动识别网页类型 1.20 在网页中动态添加Script脚本 1.21 用JavaScript随机修改页面的标题 1.22 判断网页加载完毕 1.23 嵌入网页的播放器 1.24 设置指定网页为主页 1.25 使用JavaScript传递页面参数 1.26 页面被冻结 第 2章 按钮特效 2.1 页面刷新按钮 2.2 按回车调用登录按钮 2.3 动态创建按钮 2.3 平面按钮 2.4 按钮的嵌入效果 2.5 按钮改变状态栏信息 2.6 定义按钮的热键 2.7 取得控件的绝对位置 2.8 删除时的确认提示 2.9 按钮只能单击一次 2.10 防止按钮连击 2.11 图片式按钮 2.12 文字显示在按钮底部 2.13 选择不同的列表项就显示不同的按钮 2.14 使用按钮控制文本渐变 2.15 翻页效果的公告栏 2.16 动态设置控件的事件 第3章 字符串文本和输入框特效 3.1 只带下划线的输入框 3.2 限定文本框可输入字符数 3.3 文字过长的省略号 3.4 输出26个英文字母 3.5 首字母变为大写 3.6 textarea自适应文字行数 3.7 禁止文本框的拷贝和粘贴 3.8 控制两个文本框只输其一 3.9 判断编辑器中是否包含特殊字符 3.10 判断文本中回车的数量 3.11 判断字符串中有多少汉字 3.12 去除字符串的前后空格 3.13 刷新时清空所有文本框 3.14 随意改变大小的文本框 3.15 文本框的自动全选 3.16 文本框滚动导航 3.17 按钮获取焦点 3.18 文本框获取焦点弹出下拉框 3.19 文本框简单的单击效果 3.20 文字的打字效果 3.21 文字滚动 3.22 文字滑动 3.23 文字跳动特效 3.24 荧光效果的文本 3.25 文字逐个闪亮-霓虹灯效果 3.26 旋转式的变色文字特效 3.27 黑客帝国中的字符下落效果 3.28 获取表单中文本框的个数 3.29 光标停在文字最后 3.30 分行取textarea中的值 3.31 自动插入文本 3.32 选取textarea的指定行 3.33 文本放大镜 3.34 文本框的默认输入法 3.35 文本框显示网页中选中的内容 3.36 文字的垂直滚动 3.37 文字幻灯片 3.38 随机动态文字效果 3.39 实现textarea的自动滚动 3.40 使用marquee实现文字上下滚动 3.41 类似安装效果的textarea滚动 3.42 始终显示在最顶端的文本 3.43 JavaScript过滤SQL注入字符 3.44 textarea内实现行的翻页效果 3.45 textarea中的文本插入 3.46 查找两段文本中相同的词句 3.47 自动保存网页输出的文本 3.48 文本编辑器 第4章 鼠标特效 4.1 禁用鼠标右键 4.2 使鼠标滚轮失效 4.3 状态栏显示鼠标位置 4.4 点击鼠标右键到指定页 4.5 鼠标放到图片上会显示另外一张图片 4.6 鼠标形状定义大全 4.7 鼠标移入移出时颜色变化 4.8 跟随鼠标的文字 4.9 跟随鼠标的彩色文字 4.10 跟随鼠标的魔法文字 4.11 跟随鼠标的星星 4.12 跟随鼠标的旋转背景 4.13 图片跟随鼠标 4.14 围绕鼠标的文本 4.15 鼠标旁边的提示信息 4.16 鼠标移到下拉框时自动全部打开 4.17 checkbox鼠标移入移出的特效 第5章 层和框架的特效 5.1 div层提示效果 5.2 层自动滚动到最底端 5.3 div的自动滚动 5.4 div的折迭效果 5.5 圆角div 5.6 动态添加iframe框架 5.7 用层实现长文章分页 5.8 iframe自适应高度 5.9 类似MSN的消息提示 5.10 只打印iframe的内容 第6章 下拉列表特效 6.1 下拉框实现多选 6.2 实现两个select的同步 6.3 被选中的列表项下次不能再选 6.4 不带滚动条的select 6.5 从一个下拉列表往另一个下拉列表添加内容 6.6 改变列表项的上下顺序 6.7 给下拉框数据分组 6.8 获取列表框的选择 6.9
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页