ListView若干点

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

 

发布了148 篇原创文章 · 获赞 8 · 访问量 21万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章