我正在使用DGV来显示带有文字标题的图像列表作为选项列表。它们必须始终是列表中的唯一选择。我无法找到一种方法来阻止用户通过按住Control键单击所选行来清除选择。
我失踪的设计师是否有可以做到这一点的属性?
如果我必须覆盖鼠标单击事件中的行为,还有其他方法可以清除当前需要覆盖的选择吗?
我能采取的第三种方法比我的第二种想法更简单吗?
答案 0 :(得分:2)
最简单的方法是捕获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];
}
根据您的应用程序,最好存储行索引而不是对行本身的引用。另外一定要初始化last_selected_row并在删除任何行时更新它。
挂钩SelectionChanged
事件的任何其他控件都需要安全地处理没有选择行的情况,以防它们在切换回事件之前触发。他们可以立即回来,安全地知道SelectionChanged
会暂时再次发射。
您也可以继承DataGridView
并覆盖OnSelectionChanged
方法。然后你可以在事件触发之前重新选择最后选择的行(当你调用base.OnSelectionChanged
时它会触发)。
答案 1 :(得分:0)
DGV获得了一个名为multiselect的属性,如果将其设置为false,则一次只能选择一个单元格/行。
答案 2 :(得分:0)
只需处理datagridview的DataBindingComplete事件,如下所示:
private void datagridview1_DataBindingComplete(System.Object sender, System.Windows.Forms.DataGridViewBindingCompleteEventArgs e)
{
datagridview1.ClearSelection();
}