ControlExtender 库






4.63/5 (10投票s)
2003年7月6日
2分钟阅读

112024

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

引言
control extender库包含三个组件
- ListViewExSort
 提供具有排序功能的ListView控件。
- ListViewExEdit
 提供具有编辑功能的ListView控件。
- ListBoxExEdit
 提供具有编辑功能的ListBox控件。
需要注意的是,ListViewExSort仅在XP下显示排序的向上/向下箭头,因为它使用了comctrl 6.0版本的功能,该版本仅随XP一起分发。
背景
在两个项目中,我有两个不同的类继承自listview以扩展其功能。我觉得将这两个类合并为一个类不是正确的方法。幸运的是,我找到了ListViewSortManager control这篇文章,作者是Eddie Velasquez,他给了我一个不继承而是“扩展”listview功能的想法。
使用代码
要使用扩展器控件,必须首先将其添加到工具箱中。然后可以将扩展器拖放到窗体上,它们将显示在组件托盘中。然后可以通过设置适当的属性来配置它们。
下图显示了ListViewExSort的属性。

最重要的属性是扩展器关联的控件。也可以手动编码,例如
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日
