1

我正在将 VB6 代码迁移到 VB.NET,我们正在使用 .NET 4.5.2 进入 VS2013 阶段。在原始代码中,有允许双击删除行和单击单击行选择/取消选择的 FlexGrid。我已经双击了,它会删除该行并将所有行设置为取消选择(因为双击标题单元格正在重新排序行并选择一行,而无需单击该行,然后删除现在选择的行)。我不知道这是否相关,但我已将其包括在内以防万一。

我看过这里,但它没有帮助,因为这种行为是预期的,我不知道客户是否希望听到每个人都必须重新培训才能使用 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

不起作用,因为如果您单击了已选择它的单元格,那么它总是会立即取消选择它。多选关闭。这可能吗?

4

1 回答 1

3

您的问题在这里得到解答:

在 DataGrid 中切换选择

它是 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 控件以在内部提供此功能,但这取决于您。

于 2016-05-19T15:13:34.023 回答