1,鼠標事件只要點擊到listview控件就會觸發,操作事件中的鼠標相關事件只有點擊到具體的列表項時纔回觸發
2,有時需要根據鼠標操作的位置來獲取列表項的信息,這時用listview.GetItemAt(x,y)很方便。感覺從指定點獲取相關對象的技術挺強悍的,HtmlDocument也有個類似的方法GetElementFromPoint(p)。
3,有時需要判斷一個選中的項所包圍的矩形框是否有一些特定的對象,這時用listview.GetItemRect(index),treeview的更方便treeview.selectednode.bounds直接可以獲取到。
4,點擊listview的標題列實現排序,要爲listview.listviewitemsorter賦值,其類型爲IComparer,所以要單獨寫一個類實現IComparer接口即可。
(1)寫類實現接口
public class MySorter : IComparer
{
private int mSortColumn;
private SortOrder mSortOrder;
public int SortColumn
{
get { return mSortColumn; }
set { mSortColumn = value >= 0 ? value : mSortColumn; }
}
public SortOrder Order
{
get { return mSortOrder; }
set { mSortOrder = value; }
}
public MySorter()
{
mSortColumn = 0;
mSortOrder = SortOrder.None;
}
public int Compare(object pX, object pY)
{
ListViewItem sItem1, sItem2;
sItem1 = (ListViewItem)pX;
sItem2 = (ListViewItem)pY;
switch (mSortOrder)
{
case SortOrder.Ascending:
return sItem1.SubItems[mSortColumn].Text.CompareTo(sItem2.SubItems[mSortColumn].Text);
case SortOrder.Descending:
return -sItem1.SubItems[mSortColumn].Text.CompareTo(sItem2.SubItems[mSortColumn].Text);
}
return 0;
}
}
(2)調用
private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (e.Column == (listView.ListViewItemSorter as MySorter).SortColumn)
{
if ((listView.ListViewItemSorter as MySorter).Order == SortOrder.Ascending)
(listView.ListViewItemSorter as MySorter).Order = SortOrder.Descending;
else
(listView.ListViewItemSorter as MySorter).Order = SortOrder.Ascending;
}
else
{
(listView.ListViewItemSorter as MySorter).Order = SortOrder.Ascending;
(listView.ListViewItemSorter as MySorter).SortColumn = e.Column;
}
listView.Sort();
}