7

I'm using a ListView control with multirow and fullrow select on. When I'm selecting multiple rows at once, some of my rows magically become checked. This happens when dragging the mouse over and also when selecting one, and shift clicking another.

See image describing issue here: alt text

What in the grapefruit is going on? Anyone?

4

3 回答 3

7

不幸的是 ListView 类中存在错误,这是其中之一。以下代码是对我有用的修复程序。

编辑:抱歉,这不太正确,尽管它确实可以防止您在问题中显示的错误。这可以防止选择多个项目,然后通过单击复选框来检查它们。

void SetupListView()
{
    listView.ItemCheck += new ItemCheckEventHandler(listView_ItemCheck);
    listView.MouseDown += new MouseEventHandler(listView_MouseDown);
    listView.MouseUp += new MouseEventHandler(listView_MouseUp);
    listView.MouseLeave += new EventHandler(listView_MouseLeave);
}

bool mouseDown = false;
void listView_MouseLeave(object sender, EventArgs e)
{
    mouseDown = false;
}

void listView_MouseUp(object sender, MouseEventArgs e)
{
    mouseDown = false;
}

void listView_MouseDown(object sender, MouseEventArgs e)
{
    mouseDown = true;
}

void listView_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if(mouseDown)
    {
        e.NewValue = e.CurrentValue;
    }
}
于 2012-03-07T14:34:35.813 回答
4

我在另一个论坛回答了这个问题:

http://www.codeproject.com/Messages/3417741/Re-how-to-disable-multi-select-of-checkbox-in-list.aspx

HTH - hground

于 2010-03-26T16:46:39.137 回答
1

这是一个简单的问题,试试这个

private void listView1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if (ModifierKeys == Keys.Control || ModifierKeys == Keys.Shift)
    {
        e.NewValue = e.CurrentValue;
    }
}
于 2017-12-28T13:31:39.080 回答