Dan*_*ely 7 c# datagridview winforms
我正在使用DGV显示带有文本标题的图像列表作为选项列表.它们必须始终是列表中的唯一选择.我无法找到一种方法来阻止用户通过按住Control键单击所选行来清除选择.
我失踪的设计师有没有可以做到这一点的财产?
如果我必须覆盖鼠标单击事件中的行为,还有其他方法可以清除当前需要覆盖的选择吗?
我能采取的第三种方法是否比我的第二种想法更简单?
最简单的方法是捕获该SelectionChanged事件并检查用户是否已取消选择所有行。如果是这样,请重新选择先前选择的行。本质上,您正在拦截他们的操作并将选择切换回来。像这样的东西(代码未经测试,但你会明白的):
DataGridViewRow last_selected_row;
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count == 0)
last_selected_row.Selected = true;
else
last_selected_row = dgv.SelectedRows[0];
}
Run Code Online (Sandbox Code Playgroud)
根据您的应用程序,存储行索引可能比存储对行本身的引用更好。另外,请务必初始化 last_selected_row 并在删除任何行时更新它。
挂钩该事件的任何其他控件SelectionChanged都需要安全地处理未选择任何行的情况,以防它们在将其切换回的事件之前触发。不过,他们可以立即返回,因为知道SelectionChanged会立即再次开火,这是安全的。
您还可以子类化DataGridView并重写该OnSelectionChanged方法。然后您可以在事件触发之前重新选择最后选定的行(当您调用 时它将触发base.OnSelectionChanged)。