带有CheckBoxes的C#ListView,多选行时检查自动复选框

时间:2010-01-06 23:39:18

标签: c# winforms listview checkbox multi-select

我正在使用带有multirow和fullrow select的ListView控件。当我一次选择多行时,我的一些行会神奇地被检查。拖动鼠标时,以及选择一个鼠标时,会发生这种情况,然后再点击另一个鼠标。

请参阅此处描述问题的图片:alt text

葡萄柚到底发生了什么?任何人吗?

3 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:4)

答案 2 :(得分:0)

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

private void listView1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if (ModifierKeys == Keys.Control || ModifierKeys == Keys.Shift)
    {
        e.NewValue = e.CurrentValue;
    }
}