DataGridView-当我按下回车键时,它转到下一个单元格我有一个包含5列的datagridview,当我按下“输入”时,它转到下一个当我按下回车键时单元格到达行尾时它会添加一个新行但我的问题是当我按下回车键后移动到上一个时它会跳过该行并且不会转到下一个单元格网格,任何帮助?publicpartialclassForm1:Form{publicstaticintCol;公共静态int行;publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){dataGridView1.AllowUserToAddRows=false;dataGridView1.Rows.Add();}privatevoiddataGridView1_CellEnter(objectsender,DataGridViewCellEventArgse){Col=dataGridView1.CurrentCellAddress.X;行=dataGridView1.CurrentCellAddress.Y;}privatevoidForm1_KeyPress(objectsender,KeyPressEventArgse.int)Keys.Enter){if(Col+1<5){dataGridView1.CurrentCell=dataGridView1[Col+1,Row];}else{dataGridView1.Rows.Add();dataGridView1.CurrentCell=dataGridView1[Col-4,Row+1];}}}}忘记CellEnter事件和Form1_KeyPress事件。只需像这样处理dataGridView1_KeyDown事件:introw=dataGridView1.CurrentCell.RowIndex;if(col请注意,我稍微更改了代码并记得将Handled事件属性设置为true,否则它将处理默认行为。干杯!这对我有用privatevoiddataGridView1_KeyDown(objectsender,KeyEventArgse){if(e.KeyData==Keys.Enter){e.SuppressKeyPress=true;introw=dataGridView1.CurrentRow.Index;intcol=dataGridView1.CurrentCell.ColumnIndex;}}试试这个:boolnotlastColumn=true;protectedoverrideboolProcessCmdKey(refSystem.Windows.Forms.Messagemsg,System.Windows.Forms.KeyskeyData){inticolumn=dataGridView1.CurrentCell.ColumnIndex;intirow=dataGridView1.CurrentCell.RowIndex;inti=irow;if(keyData==Keys.Enter){if(icolumn==dataGridView1.Columns.Count-1){//dataGridView1.Rows.Add();如果(notlastColumn==true){dataGridView1.CurrentCell=dataGridView1.Rows[i].Cells[0];}dataGridView1.CurrentCell=dataGridView1[0,irow+1];}else{dataGridView1.CurrentCell=dataGridView1[icolumn+1,irow];}返回真;}elseif(keyData==Keys.Escape){this.Close();返回真;}//下面是转义键returnreturnbase.ProcessCmdKey(refmsg,keyData);//下面是输入键returnreturnbase.ProcessCmdKey(refmsg,keyData);}只需复制并粘贴代码只有你应该在表格中有网格。您可以做的是处理KeyDown事件以检查是否按下后退键,您取消事件并告诉应用程序使用数据网格视图中选定的+1索引:privatevoiddataGridView1_KeyDown(objectsender,KeyEventArgse){if(e.KeyData==Keys.Enter){intcolumn=dataGridView1.CurrentCell.ColumnIndex;introw=dataGridView1.CurrentCell.RowIndex;dataGridView1.CurrentCell=dataGridView1[列,行+1];e.Handled=true;}}为了防止问题,你还应该插入一个子句来检查用户按下回车键后是否有可用的项目。使用此解决方案:privatevoidForm1_Load(objectsender,EventArgse){dtg.AllowUserToAddRows=false;}protectedoverrideboolProcessCmdKey(refMessagemsg,KeyskeyData){intiCol=dtg.CurrentCell.ColumnIndex;intiRow=dtg.CurrentCell.RowIndex;if(keyData==Keys.Enter){if(iCol==dtg.ColumnCount-1){if(iRow+1==dtg.RowCount){dtg.Rows.Add();}dtg.CurrentCell=dtg[0,iRow+1];}else{dtg.CurrentCell=dtg[iCol+1,iRow];}返回真;}elseif(keyData==Keys.Escape){关闭();返回真;}returnbase.ProcessCmdKey(refmsg,keyData);祝你好运...因为在datagridview单元格上按下enter时keyDownenvent不会触发,这最好感谢@NagarjunboolnotlastColumn=true;protectedoverrideboolProcessCmdKey(refSystem.Windows.Forms.Messagemsg,System.Windows.Forms.KeyskeyData){inticolumn=dataGridView1.CurrentCell.ColumnIndex;intirow=dataGridView1.CurrentCell.RowIndex;inti=irow;if(keyData==Keys.Enter){if(icolumn==dataGridView1.Columns.Count-1){//dataGridView1.Rows.Add();如果(notlastColumn==true){dataGridView1.CurrentCell=dataGridView1.Rows[i].Cells[0];}dataGridView1.CurrentCell=dataGridView1[0,irow+1];}else{//传递隐藏单元格,因为会触发异常//异常:当前单元格不能设置为不可见单元格//dowhile循环将使您能够传递任何隐藏单元格do{icolumn++;}while(!dgv[icolumn,irow].Visible);dataGridView1.CurrentCell=dataGridView1[icolumn,irow];}返回真;}elseif(keyData==Keys.Escape){this.Close();返回真;}//下面是转义键returnreturnreturnbase.ProcessCmdKey(refmsg,keyData);}直接按键右移...以上是C#学习教程:DataGridView-当我回车时它转到下一个单元格Grid分享的所有内容,如果对你有用还需要了解更多关于C#学习教程,希望大家多多关注---privatevoiddatagridview_KeyDown(objectsender,KeyEventArgse){if(e.KeyCode==Keys.Enter){SendKeys.Send("{Right}");}}本文收集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处:
