C# DataGridView.Editmode=Editonner。如何选择要删除的行?
当我使用EditMode=editonener时,当我选择行时,单元格将进入EditMode 用户很难选择行选择器来删除行C# DataGridView.Editmode=Editonner。如何选择要删除的行?,c#,.net,vb.net,datagridview,C#,.net,Vb.net,Datagridview,当我使用EditMode=editonener时,当我选择行时,单元格将进入EditMode 用户很难选择行选择器来删除行 你知道什么诀窍吗?你应该明白,当进入编辑模式时,你的程序不能真正理解用户的想法,但当不进入编辑模式时 用户可以按Escape键取消编辑模式,然后可以删除行。此外,您还可以选择其他DataGridViewEditMode(请参阅),例如DataGridViewEditMode.EditOnKeystroke或EditOnKeystrokeOrF2,从可用性角度来看,这两种模式
你知道什么诀窍吗?你应该明白,当进入编辑模式时,你的程序不能真正理解用户的想法,但当不进入编辑模式时 用户可以按Escape键取消编辑模式,然后可以删除行。此外,您还可以选择其他DataGridViewEditMode(请参阅),例如DataGridViewEditMode.EditOnKeystroke或EditOnKeystrokeOrF2,从可用性角度来看,这两种模式都很好。我尝试了以下技巧: 如果用户单击行标题,请将编辑模式更改为
EditOnKeystrokeOrF2
,然后结束编辑
如果用户单击其他位置,请将编辑模式更改为editonener
,然后开始编辑
Private子dgv2_CellClick(ByVal sender作为对象,ByVal e作为System.Windows.Forms.DataGridViewCellEventArgs)处理dgv2.CellClick
如果e.ColumnIndex=-1,则
dgv2.EditMode=DataGridViewEditMode.EditOnKeystrokeOrF2
dgv2.EndEdit()
ElseIf dgv2.EditMode数据网格视图EditMode.editOnter然后
dgv2.EditMode=DataGridViewEditMode.Editonner
dgv2.BeginEdit(错误)
如果结束
端接头
这确实需要在鼠标向下移动时完成。鼠标点击时触发单元格点击事件:
Private Sub ProductsGrid_MouseDown(sender As Object, e As MouseEventArgs) Handles ProductsGrid.MouseDown
Dim grid = DirectCast(sender, DataGridView)
Dim info = grid.HitTest(e.X, e.Y)
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
Private子产品grid\u MouseDown(发送方作为对象,e作为MouseEventArgs)处理产品grid.MouseDown
Dim grid=DirectCast(发送方,DataGridView)
尺寸信息=网格高度测试(e.X,e.Y)
如果into.Type=DataGridViewHitTestType.RowHeader或LSE info.Type=DataGridViewHitTestType.TopLeftHeader,则
grid.EditMode=DataGridViewEditMode.EditOnKeystrokeOrF2
grid.EndEdit()
ElseIf grid.EditMode DataGridViewEditMode.Editonner然后
grid.EditMode=DataGridViewEditMode.Editonner
如果结束
端接头
还需要做更多的工作,包括处理Tab键行为。此类行为(以及上述修改)最好在继承DataGridView的用户控件中完成。您可以将焦点更改为父控件。这将迫使单元格结束编辑,而无需更改模式本身 例如,如果选择多个单元格,此代码段将离开编辑模式
protected override void OnSelectionChanged(EventArgs e)
{
base.OnSelectionChanged(e);
if (SelectedCells.Count > 1)
{
// leave edit mode
Parent?.Focus();
}
}
我知道所有其他模式。用户喜欢Excel模式。我仅在频繁使用的DGV上使用Editonner。我知道如何删除一行,但指导每个用户此行为。。。。Esc键可以取消编辑,但在此模式下,重新进入编辑模式。我不明白为什么选择行选择器,不结束编辑模式。解决方案是将光标移动到不可编辑的单元格。这非常有用,我将其与“CellPreviewKeyDown”事件相结合,允许按ESC键离开单元格编辑模式。我也发现这很有用,但如果有一个单元格已经处于编辑模式,并且我选择了多行要删除,它会将其中一行保留在编辑模式下,所以删除不再有效。然后我将此代码移动到
CellMouseUp
事件中,它正是我想要的工作方式。谢谢你!
protected override void OnSelectionChanged(EventArgs e)
{
base.OnSelectionChanged(e);
if (SelectedCells.Count > 1)
{
// leave edit mode
Parent?.Focus();
}
}