vb.net - keydown 时如何检测我的datagridview?
问题描述
当datagridview单元格更改或按回车键时,我有一个代码用于在datagridview中选择正确的单元格
但是当我按下回车键时代码总是在运行
只有我在 datagridview 中才能做到这一点?
Private KeyHandled As Boolean
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If FAT_TABLO.RowCount = 0 Then Exit Function
Dim icolumn As Integer = FAT_TABLO.CurrentCell.ColumnIndex
Dim irow As Integer = FAT_TABLO.CurrentCell.RowIndex
If keyData = Keys.Enter Then
If icolumn = FAT_TABLO.Columns.Count - 1 Then
FAT_TABLO.Rows.Add()
FAT_TABLO.CurrentCell = FAT_TABLO(0, irow + 1)
Else
FAT_TABLO.CurrentCell = FAT_TABLO(icolumn + 1, irow)
End If
Return True
Else
Return MyBase.ProcessCmdKey(msg, keyData)
End If
End Function
解决方案
尝试这个
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'add new dgv
Dim Dgv1 As New DGV
With Dgv1
.AllowUserToAddRows = False
.Columns.Add("ColA", "A")
.Columns.Add("ColB", "B")
.Columns.Add("ColC", "C")
.Rows.Add(5)
.Dock = DockStyle.Top
End With
Me.Controls.Add(Dgv1)
End Sub
End Class
Class DGV
Inherits DataGridView
Protected Overrides Function ProcessDataGridViewKey(e As KeyEventArgs) As Boolean
If e.KeyData = Keys.Enter And Me.Rows.Count > 0 Then
With Me.CurrentCell
If .ColumnIndex < Me.Columns.Count - 1 Then
'Move to next cell
Me.CurrentCell = Me.Item(NextVisCol(.ColumnIndex + 1), .RowIndex)
Return True
ElseIf .ColumnIndex = Me.Columns.Count - 1 Then
If .RowIndex = Me.Rows.Count - 1 Then
'Add new row
Me.Rows.Add()
End If
'Move to first cell in next row
If Me.Rows(.RowIndex).IsNewRow = False Then Me.CurrentCell = Me.Item(NextVisCol(0), .RowIndex + 1)
Return True
End If
End With
End If
Return MyBase.ProcessDataGridViewKey(e)
End Function
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
If keyData = Keys.Enter Then Return ProcessDataGridViewKey(New KeyEventArgs(Keys.Enter))
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
Private Function NextVisCol(Optional start As Integer = 0) As Integer
For i As Integer = start To Me.Columns.Count - 1
If Me.Columns(i).Visible Then Return i
Next
For i As Integer = 0 To Me.Columns.Count - 1
If Me.Columns(i).Visible Then Return i
Next
Throw New Exception("All columns are not visible")
End Function
End Class
推荐阅读
- tensorflow-serving - Tensorflow Serving Model Server 在轮询 s3 以获取配置文件时不断重新添加相同的模型
- php - 批量产品导入 Woocommerce 问题
- java - 具有可选数据库写入的 Spring 批处理复合项写入器
- reactjs - 如何在反应js中将值从子类传递给父类
- javascript - C# asp.net 显示“已保存好”标签 2 秒
- java - Java:使用接口从父类调用子类方法
- javascript - 我查找 n 个数字的 LCM 的功能仅在某些类型的情况下失败。我的代码有什么问题?
- android - 将 JSON 数据导入 HashMap
- algorithm - 计算 vhdl 中相似的连续位
- jenkins - 如何在另一台服务器上远程安装詹金斯