在我的DataGridView中,我使用
激活一个单元格dgw.CurrentCell = dgw.Rows[e.RowIndex].Cells["ColumnHeader"];
这样,用户只需按任意键即可直接开始输入单元格。当第一个键是加号时,我想删除单元格中的文本。
如何捕捉按键事件? dgw_KeyDown不起作用,因为该事件是针对DataGridView本身的,但在这种情况下不会触发,因为单元格处于焦点。
答案 0 :(得分:0)
你不是第一个提出这个问题的人,而这就是我找到的。
您无法捕获单元格内部的内容,因为您尝试捕获的事件与DataGridView无关。当一个单元格获得焦点时,DataGridViewTextBoxEditingControl会封装所选的单元格,并且它就是您想要的事件。 TextChanged事件。结合DataGridView的EditingControllShowing事件,您可以捕获用户在键入时输入的文本。
Private Sub DataGridView1_EditingControlShowing( sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
AddHandler e.Control.TextChanged, AddressOf CellTextChanged
End Sub
private sub cellTextChanged(sender as object, e as EventArgs)
dim textCtrl as DataGridViewTextBoxEditingControl = DirectCast(sender, DataGridViewTextBoxEditingControl)
console.WriteLine(textCtrl.Text)
end sub
当您离开单元格时,DataGridViewTextBoxEditingControl或dgvtbec会被清除,因此您无需担心任何额外的内容!
等待!我想使用KeyDown事件,问我的问题。你为什么不用它?当您使用KeyDown事件时,按任意键时将引发该事件。这并不意味着它会在您的单元格中输入更改后将其提升。这意味着如果我们在空单元格上使用KeyDown事件,我们仍然会看到单元格没有文本,而不是在我们使用TextChanged事件时找到我们输入的任何文本。
相关调查结果(link):
网格没有TextChanged事件。您没有在网格中编辑任何内容。当您开始编辑会话时,单元格中嵌入了适当类型的新控件或现有控件,并在其中编辑数据。这就是为什么在网格中没有引发事件的原因:因为在离开单元格之前网格中没有任何变化,编辑会话结束并且新值被推送到单元格。