【发布时间】:2017-01-23 14:38:35
【问题描述】:
我在 WinForm 中使用列表视图。通过单击列标题,列表视图将被排序。
是否可以禁用此功能?
【问题讨论】:
-
什么形式? WPF、WinForms、WebForms?
-
我正在使用 WinForms
我在 WinForm 中使用列表视图。通过单击列标题,列表视图将被排序。
是否可以禁用此功能?
【问题讨论】:
我会检查这个答案 - ListView sorting
.. 但它不会禁用单击任何按钮时的排序。对此的解决方案是创建自己的继承自 ListView 的子级,这将覆盖排序方法,而不调用基本方法 => 什么也不做。
另外,您可以添加 ListViewItemSorter 并将其设置为 null。
例如:
class MyListView : System.Windows.Forms.ListView
{
public MyListView()
{
this.Sorting = System.Windows.Forms.SortOrder.None;
this.ListViewItemSorter = null;
}
}
【讨论】:
Here是一篇介绍如何在listView上实现排序的文章。
您可能必须从 listView 上的 ColumnClick 事件中移除事件处理程序。
【讨论】:
我个人更喜欢LVS_NOSORTHEADER的窗口风格:
列标题不像按钮那样工作。如果在报表视图中单击列标题没有执行任何操作(例如排序),则可以使用此样式。
使用类似的东西:
public class MyListView :
System.Windows.Forms.ListView
{
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
cp.Style |= 0x8000; // LVS_NOSORTHEADER
return cp;
}
}
}
请注意,您不能在创建控件后使用SetWindowLong 设置样式。 You can only use LVS_NOSORTHEADER upon control creation:
ListCtrl 不会忽略样式,但有些样式只在创建控件时生效。因此,在创建控件后对此类样式的任何更改都将无效。
【讨论】: