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();
}