dataGridView使用指南系列一、回车换行或换列完美解决方案

在使用datagridview控件时,默认按回车是跳转到下一行的当前列的,要想让按回车跳转到同一行的下一列该怎么做呢?

百度搜索了一下,大都是使用该控件的key_down事件和CellEndEdit进行处理,我都试验了一下,全都不行,不能达到预期的效果,而且使原来的方向键的功能也搞乱了。

找了半天,最后终于找到一个有效的方法(注:不是我发明的),重载窗体的ProcessCmdKey事件,代码如下:

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
bool enterkey;
protected override bool ProcessCmdKey( ref Message msg, Keys keyData)
{
enterkey
= false ;

if (keyData == Keys.Enter) // 监听回车事件
{
if ( this .gvGzb.IsCurrentCellInEditMode) // 如果当前单元格处于编辑模式
{
enterkey
= true ; // 把是否点击按钮设置为真

if (btnSetEnter.Text != " " )
if (gvGzb.CurrentCell.RowIndex == gvGzb.Rows.Count - 1 )
{
// SendKeys.Send("{Up}");
SendKeys.Send( " {Tab} " );
}
else
{
SendKeys.Send(
" {Up} " );
SendKeys.Send(
" {Tab} " );
}
}


}

// 继续原来base.ProcessCmdKey中的处理
return base .ProcessCmdKey( ref msg, keyData);
}

以上代码只处理编辑状态下的回车事件,在普通状态下的回车事件就要用key_down事件处理了:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
private void gvGzb_KeyDown( object sender, KeyEventArgs e)
{
if ((e.KeyCode == Keys.Return) && (btnSetEnter.Text != " " ))
{
SendKeys.Send(
" {Tab} " );
e.Handled
= true ;
if ((gvGzb.FirstDisplayedScrollingColumnHiddenWidth > 0 ) && ! gvGzb.Columns[gvGzb.SelectedCells[ 0 ].ColumnIndex].Frozen)
{
gvGzb.FirstDisplayedScrollingColumnIndex
= gvGzb.SelectedCells[ 0 ].ColumnIndex;
}
}

}

 

上面的FirstDisplayedScrollingColumnIndex属性设置,是为了在datagirdview的列很多的情况下,按回车换列将滚动条后面的列自动显示出来,如下图,我用net做的简易工资管理系统,有很多项,如果不设置的话,最后一列只能看到一半。
2010030619495025.jpg

提供这个方法的那位仁兄,不知为什么还要处理Cell_Parsing事件,我这里不需要已经发觉很完美了。

转载于:https://www.cnblogs.com/gxlxzys/archive/2010/03/28/1699014.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值