首页 > 开发 > 综合 > 正文

C#中加强ListView控件的功能

2024-07-21 02:28:43
字体:
来源:转载
供稿:网友
  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  •   首先是实现listview控件的自定义排序,订阅listview控件的columnclick事件

    private void listview1_columnclick(object sender, columnclickeventargs e)
    {
     if (this.listview1.columns[e.column].tag == null)
      this.listview1.columns[e.column].tag = true;
      bool tabk = (bool)this.listview1.columns[e.column].tag;
     if (tabk)
      this.listview1.columns[e.column].tag = false;
     else
      this.listview1.columns[e.column].tag = true;
      this.listview1.listviewitemsorter = new listviewsort(e.column, this.listview1.columns[e.column].tag); 
      //指定排序器并传送列索引与升序降序关键字
      this.listview1.sort();//对列表进行自定义排序
    }


      排序类的定义:

    ///
    ///自定义listview控件排序函数
    ///


    class listviewsort : icomparer
    {
     private int col;
     private 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.compare(((listviewitem)x).subitems[col].text, ((listviewitem)y).subitems[col].text);
      if (desck) return -tempint;
      else return tempint;
     }
    }

      上面的listview控件的自定义排列,即单击listview控件的标题时进行排序

      下面将实现listview控件的最后一列的去除,即自动调整合适的大小

      首先写一个调整listview控件列宽的函数

    ///
    ///自动调整listview控件最后一列的列宽
    ///

    ///
    ///

    private void 调整lv列宽()
    {
     listview1.columnwidthchanged -= new columnwidthchangedeventhandler(listview1_columnwidthchanged);
     备注.autoresize(columnheaderautoresizestyle.headersize);
     listview1.columnwidthchanged += new columnwidthchangedeventhandler(listview1_columnwidthchanged);
    }

      上面的备注列是listview控件的最后一列的名称,而listview控件的实例名为listview1

      然后订阅listview控件的columnwidthchanged事件,即列宽改变时自动调整列宽

    ///
    /// listview列宽改变事件函数
    ///

    ///
    ///

    void listview1_columnwidthchanged(object sender, columnwidthchangedeventargs e)
    {
     调整lv列宽();
    }


      再订阅listview控件的size_change事件,即窗口大小被改变时调整列宽

    void listview1_sizechanged(object sender, eventargs e)
    {
     调整lv列宽();
    }

      最后在窗体的shown事件中调整listview控件的列宽,即第一次显示的时候马上调整列宽

    private void 商品管理_shown(object sender, eventargs e)
    {
     调整lv列宽();
    }
    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表