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(); } }