程序开发 > C# > 正文

listview checkboxes 用Imagelist设置宽高后不显示

亮术网 2013-11-27 本网原创

  在用 C# 开发 Winform 时,遇到一个问题,用 listview 显示表格时,同时显示 checkboxes,使用 imageslist 控件设置 listview 的高度后,在 Win7(Windows Server 2008 R2) 以上版本系统,checkboxes显示,而 XP(Windows Server 2003)却不显示;如果不用 ImageList 设置高度,XP 也显示 checkboxes。开始以为 XP 不支持用 ImageList 设置 listview 高宽,后来做了一个简单的测试实例,却可以显示,说明是代码问题而不是系统问题。

 

  一、XP(Windows 2003)不显示 checkboxes 代码

  private void ListviewTable()
  {
    lv.Clear();
    lv.GridLines = true;
    lv.View = View.Details;
    lv.Scrollable = true;
    lv.FullRowSelect = true;
    lv.CheckBoxes = true;

    //设置行高
    ImageList imgList = new ImageList();
    imgList.ImageSize = new Size(1, 22);
    lv.SmallImageList = imgList;

    lv.Columns.Add("用户名", 120, HorizontalAlignment.Center);
    lv.Columns.Add("密码", 80, HorizontalAlignment.Center);

    ListViewItem ListViewItem1 = new ListViewItem();
    ListViewItem1.SubItems.Clear();
    ListViewItem1.SubItems[0].Text = "春天满绿";
    ListViewItem1.SubItems.Add("90874869");
    lv.Items.Add(ListViewItem1);

    ListViewItem1 = new ListViewItem();
    ListViewItem1.SubItems[0].Text = "薄云飘里";
    ListViewItem1.SubItems.Add("890532086");
    lv.Items.Add(ListViewItem1);
  }

  上述代码关键的一点是,用 ImageList 设置行高的代码是在向 listview 添加的数据的上面,如果把它们放到向 listview 添加的数据的后面,则 XP 也可以显示 checkboxes 复选框。

 

 

  二、XP(Windows 2003)显示 checkboxes 代码

  private void ListviewTable()
  {
    lv.Clear();
    lv.GridLines = true;
    lv.View = View.Details;
    lv.Scrollable = true;
    lv.FullRowSelect = true;
    lv.CheckBoxes = true;

    lv.Columns.Add("用户名", 120, HorizontalAlignment.Center);
    lv.Columns.Add("密码", 80, HorizontalAlignment.Center);

    ListViewItem ListViewItem1 = new ListViewItem();
    ListViewItem1.SubItems.Clear();
    ListViewItem1.SubItems[0].Text = "春天满绿";
    ListViewItem1.SubItems.Add("90874869");
    lv.Items.Add(ListViewItem1);

    ListViewItem1 = new ListViewItem();
    ListViewItem1.SubItems[0].Text = "薄云飘里";
    ListViewItem1.SubItems.Add("890532086");
    lv.Items.Add(ListViewItem1);
  
    //设置行高
    ImageList imgList = new ImageList();
    imgList.ImageSize = new Size(1, 22);
    lv.SmallImageList = imgList;
  }

  对于 Win7 以上版本系统,无论把设置行高代码放在向 listview 添加数据之前还是之后,都可以正常显示 checkboxes;对 XP及以下版本的系统,应该是系统设计时要求把用 ImageList 设置 listview 行高的代码放在添加数据之后。

 

  一点提示:

  如果 listview 是共用的,在绑定数据前,要把 lv.SmallImageList = null;,这样在添加数据后重新设置 listview 的高度才有效,因为前一程序可能已经设置了 listview 的高度,在最后再设置一次也无效。

本文浓缩标签:checkboxeslistview不显示