【发布时间】:2010-12-28 21:30:51
【问题描述】:
我试图模仿 Windows 资源管理器处理多项选择的方式。在默认的 DataGridView 中,您可以使用 Ctrl 键单击来选择多个项目。但是,如果您释放 Ctrl 键,然后尝试拖放所选项目,它会清除所选项目并仅选择“命中”行。我在网上某处找到了以下解决方案。
protected override OnMouseDown(MouseEventArgs e)
{
int hitRowIndex = HitTest(e.X, e.Y).RowIndex;
if(!SelectedRows.Contains(Rows[hitRowIndex]))
{
base.OnMouseDown();
}
}
但是,这会导致其他副作用。按住 CTRL 键并将鼠标悬停在所选项目上,该项目保持选中状态。这是有道理的,因为如果选择了单击的行,就会绕过 mousedown 事件。从 Windows 资源管理器的行为来看,似乎直到 MouseUp 事件才处理按住 CTRL 键的项目的取消选择。有没有人尝试过这样做?
【问题讨论】:
标签: c# datagridview multi-select