我有一个在第一列有复选框的ListView。在为自定义排序编写一些代码时(当用户单击列标题时),我遇到了一些奇怪的行为。
当用户单击列标题时,我使用ColumnClickEventHandler将listView.Sorting设置为SortOrder.Ascending (或SortOrder.Descending);当命中此行代码时,它似乎会触发ItemCheck事件处理程序。
例如
listView.ItemCheck += new ItemCheckEventHandler(listView_ItemCheck);
listView.ColumnClick += new ColumnClickEventHandler(listView_ColumnClick);
...
...
void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
// Determine whether the column is the same as the last column clicked.
if (e.Column != sortColumn)
{
// Set the sort column to the new column.
sortColumn = e.Column;
// Set the sort order to ascending by default.
listView.Sorting = SortOrder.Ascending;
}
else
{
// Determine what the last sort order was and change it.
if (listView.Sorting == SortOrder.Ascending)
listView.Sorting = SortOrder.Descending;
else
listView.Sorting = SortOrder.Ascending;
}
}在点击行listView.Sorting = SortOrder.Descending;之后,将调用listView.ItemCheck的事件处理程序。
发布于 2012-09-06 19:51:11
这可能是一个糟糕的技巧,但您可以尝试:
void listView_ColumnClick(object sender, ColumnClickEventArgs e)
{
listView.ItemCheck -= listView_ItemCheck;
// Determine whether the column is the same as the last column clicked.
if (e.Column != sortColumn)
{
// Set the sort column to the new column.
sortColumn = e.Column;
// Set the sort order to ascending by default.
listView.Sorting = SortOrder.Ascending;
}
else
{
// Determine what the last sort order was and change it.
if (listView.Sorting == SortOrder.Ascending)
listView.Sorting = SortOrder.Descending;
else
listView.Sorting = SortOrder.Ascending;
}
listView.ItemCheck += listView_ItemCheck;
}或
使用中使用的布尔属性(private bool disableItemCheck_)
listView_ColumnClick (与我的修改位置相同)和
listView_ItemCheck
if (disableItemCheck_)
return;
//ItemCheck logichttps://stackoverflow.com/questions/12298539
复制相似问题