515
windows
C# Winform ListView使用
以下內容均來自網上,個人收集整理,具體出處也難確認了,就沒寫出處了;
一、基本使用:
listView.View = View.Details;//設置視圖
listView.SmallImageList = imageList;//設置圖標
//添加列
listView.Columns.Add("本地路徑", 150, HorizontalAlignment.Left);
listView.Columns.Add("遠程路徑", 150, HorizontalAlignment.Left);
listView.Columns.Add("上傳狀態", 80, HorizontalAlignment.Left);
listView.Columns.Add("耗時", 80, HorizontalAlignment.Left);
//添加行
var item = new ListViewItem();
item.ImageIndex = 1;
item.Text = name; //本地路徑
item.SubItems.Add(path); //遠程路徑
item.SubItems.Add("ok"); //執行狀態
item.SubItems.Add("0.5"); //耗時統計
listView.BeginUpdate();
listView.Items.Add(item);
listView.Items[listView.Items.Count - 1].EnsureVisible();//滾動到最後
listView.EndUpdate();
二、動態添加記錄,ListView不閃爍:
1.新建一個C# 類,命名為ListViewNF(NF=Never/No Flickering)
2.複製如下代碼
class ListViewNF : System.Windows.Forms.ListView
{
public ListViewNF()
{
// Activate double buffering
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
// Enable the OnNotifyMessage event so we get a chance to filter out
// Windows messages before they get to the form's WndProc
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
}
protected override void OnNotifyMessage(Message m)
{
//Filter out the WM_ERASEBKGND message
if (m.Msg != 0x14)
{
base.OnNotifyMessage(m);
}
}
}3.修改你的WinForm對應的xxxx.Design.cs,將係統默認生成的System.Windows.Forms.ListView改為ListViewNF即可。
三、動態添加記錄,跳轉到最後行:
實現代碼:
ListViewItem Item = new ListViewItem(); Item.SubItems.Clear(); .....相關其他代碼 this.listView1.Items.Add(Item); Item.EnsureVisible(); //關鍵的實現函數
四、點擊表頭實現排序:
1.增加自定義排序類:
using System;
using System.Collections;
using System.Windows.Forms;
namespace Whir.Software.Framework.UI
{
public class ListViewSort : IComparer
{
private readonly int _col;
private readonly bool _descK;
public ListViewSort()
{
_col = 0;
}
public ListViewSort(int column, object desc)
{
_descK = (bool)desc;
_col = column; //當前列,0,1,2...,參數由ListView控件的ColumnClick事件傳遞
}
public int Compare(object x, object y)
{
int tempInt = String.CompareOrdinal(((ListViewItem)x).SubItems[_col].Text,
((ListViewItem)y).SubItems[_col].Text);
if (_descK)
{
return -tempInt;
}
return tempInt;
}
}
}2.給ListView增加點擊表頭事件:
private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (listView.Columns[e.Column].Tag == null)
{
listView.Columns[e.Column].Tag = true;
}
var tabK = (bool)listView.Columns[e.Column].Tag;
listView.Columns[e.Column].Tag = !tabK;
listView.ListViewItemSorter = new ListViewSort(e.Column, listView.Columns[e.Column].Tag);
//指定排序器並傳送列索引與升序降序關鍵字
listView.Sort();//對列表進行自定義排序
}
最後更新:2017-04-03 08:26:24