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所示:
圖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所示:
圖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所示:
圖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所示:
圖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 測試,可直接復到文件運行看效果。
總結
以上是生活随笔為你收集整理的C# ListView控件显示表格(自适应宽度),添加 Checkbox,删除选择项,选中颜色和鼠标滑过背景变色的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PKCS7填充标准代码--C语言实现
- 下一篇: C# 解决LISTVIEW控件显示数据出