C# 如何修复listview复选框行为?

C# 如何修复listview复选框行为?,c#,winforms,C#,Winforms,我使用属性checkboxes==true创建了Listbox,但我遇到的问题是需要在该行上单击两次才能将其设置为选中。我需要以这样一种方式来更改它,即我只需单击该行一次,即可将该行设置为选中状态。我所做的是添加了鼠标点击事件: private void Cbl_folders_MouseDown(object sender, MouseEventArgs e) { SelectedListViewItemCollection select

我使用属性
checkboxes==true
创建了Listbox,但我遇到的问题是需要在该行上单击两次才能将其设置为选中。我需要以这样一种方式来更改它,即我只需单击该行一次,即可将该行设置为选中状态。我所做的是添加了鼠标点击事件:

        private void Cbl_folders_MouseDown(object sender, MouseEventArgs e)
        {
            SelectedListViewItemCollection selectedItemsList = Cbl_folders.SelectedItems;

            if(selectedItemsList.Count > Constants.EMPTY_COUNT)
            {
                selectedItemsList[0].Checked = !selectedItemsList[0].Checked;
            }
        }
然后一切正常,首先,单击该行,将该行设置为选中状态,然后单击该行,将该行设置为未选中状态。但后来我发现,如果您单击该行并将该行设置为选中,然后单击另一行上的复选框,则选中的第一行会将状态更改为未选中。为什么?因为我正在跟踪mouseDown事件,甚至当我单击另一行上的复选框时,mouse down事件也会查看选定的项目,显然选定的项目是单击的第一行


我知道可以添加一些标志并查看单击的位置等,但这似乎过于复杂,我觉得应该有一个更简单的解决方案。

处理
MouseDown
事件,以便在单击标签区域时切换属性。要获取有关单击区域的信息,请调用返回对象的方法并检查属性,该属性返回其中一个值

private void Cbl\u folders\u MouseDown(对象发送方,MouseEventArgs e)
{
如果(Cbl_文件夹。复选框)
{
var ht=Cbl_folders.HitTest(例如位置);
if(ht.Item!=null&&ht.Location==ListViewHitTestLocations.Label)
ht.Item.Checked=!ht.Item.Checked;
}
}

这样,当您在复选框区域外单击(由
ListViewHitTestLocations.StateImage
值确定)时,项目也会被鼠标选中/取消选中。

当您单击标签区域时,处理
MouseDown
事件以切换属性。要获取有关单击区域的信息,请调用返回对象的方法并检查属性,该属性返回其中一个值

private void Cbl\u folders\u MouseDown(对象发送方,MouseEventArgs e)
{
如果(Cbl_文件夹。复选框)
{
var ht=Cbl_folders.HitTest(例如位置);
if(ht.Item!=null&&ht.Location==ListViewHitTestLocations.Label)
ht.Item.Checked=!ht.Item.Checked;
}
}

这样,当您在项目的复选框区域外单击时(由
ListViewHitTestLocations.StateImage
值确定),项目也会被鼠标选中/取消选中。

您的ListView模式是什么?当用户单击复选框时,如果项目被选中,那么预期的行为是什么?如果用户取消选中项目,该怎么办?@RezaAghaei你说的ListView模式是什么意思?它是常规的listview,只是带有复选框属性==true。行为应该是这样的-当我点击该行时,它必须改变状态(checked=!checked),如果我点击checkbox,也必须改变状态。例如,我单击了第一行,它从未选中变为选中,然后我单击了第二行的复选框,它也更改了状态,然后我点击第一行,但这一次在复选框上,它将状态从选中更改为未选中,然后我点击第二行,它再次被更改state@RezaAghaei长话短说并不重要,如果我点击行或复选框,它应该改变状态。你的ListView模式是什么?当用户单击复选框时,如果项目被选中,那么预期的行为是什么?如果用户取消选中项目,该怎么办?@RezaAghaei你说的ListView模式是什么意思?它是常规的listview,只是带有复选框属性==true。行为应该是这样的-当我点击该行时,它必须改变状态(checked=!checked),如果我点击checkbox,也必须改变状态。例如,我单击了第一行,它从未选中变为选中,然后我单击了第二行的复选框,它也更改了状态,然后我点击第一行,但这一次在复选框上,它将状态从选中更改为未选中,然后我点击第二行,它再次被更改state@RezaAghaei长话短说并不重要,如果我点击行或复选框,它应该改变状态。