DataGridView.Editmode = EditOnEnter。 如何选择要删除的行?

当我使用EditMode = EditOnEnter时,单元格在我选择行时进入editmode。

用户很难选择RowSelector删除行。

你知道任何诡计吗?

我试试这个技巧:

当Cell Click:

  • if index = -1 EndEdit和EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
  • 否则如果EditOnKeystrokeOrF2 – 还原EditMode和BeginEdit

Private Sub dgv2_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv2.CellClick If e.ColumnIndex = -1 Then dgv2.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2 dgv2.EndEdit() ElseIf dgv2.EditMode <> DataGridViewEditMode.EditOnEnter Then dgv2.EditMode = DataGridViewEditMode.EditOnEnter dgv2.BeginEdit(False) End If End Sub 

您应该明白,当您进入编辑模式时,您的程序无法真正读取用户的想法和理解,但是当不这样做时。

用户可以按Esc键取消编辑模式,然后可以删除行。 您也可以选择其他DataGridViewEditMode(请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridvieweditmode.aspx ),例如DataGridViewEditMode.EditOnKeystroke或EditOnKeystrokeOrF2,两者都可以从可用性中获益观点看法。

这确实需要在MouseDown上完成。 在MouseUp上触发Cell Click事件:

 Private Sub ProductsGrid_MouseDown(sender As Object, e As MouseEventArgs) Handles ProductsGrid.MouseDown Dim grid = DirectCast(sender, DataGridView) Dim info = grid.HitTest(eX, eY) If into.Type = DataGridViewHitTestType.RowHeader OrElse info.Type = DataGridViewHitTestType.TopLeftHeader Then grid.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2 grid.EndEdit() ElseIf grid.EditMode <> DataGridViewEditMode.EditOnEnter Then grid.EditMode = DataGridViewEditMode.EditOnEnter End If End Sub 

还有更多需要完成的工作,包括处理Tab键行为。 这种行为(以及上述修改)可能最好在inheritanceDataGridView的用户控件中完成。

您可以将焦点更改为父控件。 这将迫使单元格结束编辑而无需更改模式本身。

例如,如果您选择多个单元格,则此代码段将退出编辑模式。

 protected override void OnSelectionChanged(EventArgs e) { base.OnSelectionChanged(e); if (SelectedCells.Count > 1) { // leave edit mode Parent?.Focus(); } }