我正在将VB6代码迁移到VB.NET,我们使用.NET 4.5.2进入VS2013阶段。在原始代码中,有一些FlexGrids允许在单击时双击行删除和行选择/取消选择。我有双击正常,它删除行并将所有行设置为取消选择(因为双击标题单元格重新排序行并选择一行,而不是单击该行,然后删除现在选择了一行)。我不知道这是否相关,但我已将其包括在内以防万一。
我看了here但它没有帮助,因为这种行为是预期的,我不知道客户是否希望听到每个人都必须重新训练才能使用CTRL +点击取消选择的方法。如果它必须如此,那就这样吧,但我必须努力使这项工作。
使用单元格单击事件执行此类操作
Private Sub grdSelectedOps_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles grdSelectedOps.CellClick
If Not grdSelectedOps(e.ColumnIndex, e.RowIndex).Selected Then
grdSelectedOps(grdSelectedOps.CurrentCell.ColumnIndex, grdSelectedOps.CurrentCell.RowIndex).Selected = True
Else
grdSelectedOps(grdSelectedOps.CurrentCell.ColumnIndex, grdSelectedOps.CurrentCell.RowIndex).Selected = False
End If
End Sub
不起作用,因为如果您单击了已选择它的单元格,则它会立即取消选择它。多选已关闭。这可能吗?
答案 0 :(得分:2)
你的问题在这里得到解答:
这是C#所以这里是等效的VB.NET代码:
REM Keeps track of selection status
Private selectionChanged As Boolean
REM Fires Second
Private Sub dataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs)
If Not selectionChanged Then
dataGridView1.ClearSelection()
selectionChanged = True
Else
selectionChanged = False
End If
End Sub
REm Fires first
Private Sub dataGridView1_SelectionChanged(sender As Object, e As EventArgs)
selectionChanged = True
End Sub
您可能希望覆盖DataGrid控件以在内部提供此功能,但这取决于您。