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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章