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日