65.9K
CodeProject 正在变化。 阅读更多。
Home

ControlExtender 库

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.63/5 (10投票s)

2003年7月6日

2分钟阅读

viewsIcon

112024

downloadIcon

1551

一个增强标准ListView和ListBox控件的组件。(完全的设计器支持)

Sample Image - extendertest.png

引言

control extender库包含三个组件

  • ListViewExSort
    提供具有排序功能的ListView控件。
  • ListViewExEdit
    提供具有编辑功能的ListView控件。
  • ListBoxExEdit
    提供具有编辑功能的ListBox控件。

需要注意的是,ListViewExSort仅在XP下显示排序的向上/向下箭头,因为它使用了comctrl 6.0版本的功能,该版本仅随XP一起分发。

背景

在两个项目中,我有两个不同的类继承自listview以扩展其功能。我觉得将这两个类合并为一个类不是正确的方法。幸运的是,我找到了ListViewSortManager control这篇文章,作者是Eddie Velasquez,他给了我一个不继承而是“扩展”listview功能的想法。

使用代码

要使用扩展器控件,必须首先将其添加到工具箱中。然后可以将扩展器拖放到窗体上,它们将显示在组件托盘中。然后可以通过设置适当的属性来配置它们。

下图显示了ListViewExSort的属性。

ListView Properties

最重要的属性是扩展器关联的控件。也可以手动编码,例如

listViewExSort1.ListView=listView1;

唯一不能使用设计器设置的属性是comparer。 默认情况下(如果没有提供比较器),列将作为区分大小写的字符串进行排序。 如果应该通过其他方式执行排序,则必须提供自定义排序器。 以下代码显示了如何编码数字比较器

class Int32Comparer : IListViewComparer
{
    public int OnCompare(string x, string y)
    {
        try
        {
            return int.Parse(x, NumberStyles.Number) - 
                                int.Parse(y, NumberStyles.Number);
        }
        catch (System.Exception)
        {
            return -1;
        }
    }
}

比较器类必须按如下方式附加到listview扩展器

listViewExSort1.Comparer=new IListViewComparer[]
   {
      null,    
      new Int32Comparer(),
   };

上面的示例将按数字对第二列进行排序,并按文本对所有其他列进行排序。

关注点

按键导航

不太明显的是,ListBoxExEdit支持按键导航。 默认情况下它是关闭的。 以下代码启用它

this.listBoxExEdit1.KeyNavigation = true;

另请注意,以下键映射已硬编码到库中

Ctrl-Insert - 在当前选定行上方插入新行
Ctrl-Delete - 删除选定的行
Ctrl-Down - 向下移动选定的行
Ctrl-Up - 向上移动选定的行

VS.NET

示例项目适用于VS.NET 2003。幸运的是,有一个project可用,可以将2003文件转换回VS.NET。
转换后的项目将无法编译

Application.EnableVisualStyles(); // .NET 1.1 only

因为EnableVisualStyles仅在.NET 1.1中可用。可以删除此行,但xp外观将不可用。

最后说明

control extender库尚未准备好用于所有类型的项目。其中的一些部分几乎没有经过测试,我希望它会在我以前从未测试过的方式中失败。对我来说,这三个控件很有用,并且我打算在与它们一起工作时提高功能和可靠性。我希望有一些人可以接受有限的功能,并可以给我有关如何改进的反馈。

历史

  • 首次发布:2003年7月6日
© . All rights reserved.