首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

datagridview中按enter自动跳到下一步的有关问题

2012-04-04 
datagridview中按enter自动跳到下一步的问题?我有一DataGridView控件dv1,其中有两列A1,A2,A1为只读列,a2为

datagridview中按enter自动跳到下一步的问题?
我有一DataGridView控件dv1,其中有两列A1,A2,A1为只读列,a2为可编辑的DataGridViewTextBoxColumn类型,由于dv1中的各行是在程序运行中才生成的。现在我想在dv1的第二列的第一行开始进行输入,一旦在第一行输入内容按enter后,光标自动跳到下一行的A2列,这样该怎样实现呢?

  另外,假设现在光标在a2列的第n行,按enter后跳到N+1行,这样又该怎么办呢?

  当然,第二种情况与第一种情况是一样的。
 

[解决办法]
dataGridView1.CurrentCell.RowIndex 当前单元格行
dataGridView1.CurrentCell.ColumnIndex 当前单元格列
[解决办法]
以下代码连右移(键盘Right键)都不会进入只读单元格,唯有鼠标点击才可以。参考代码:

C# code
private bool isEnterKey;protected override bool ProcessDialogKey(Keys keyData){    if (keyData==Keys.Enter)    {        return this.ProcessRightKey(keyData);    }    return base.ProcessDialogKey(keyData);}public new bool ProcessRightKey(Keys keyData){    if (keyData == Keys.Enter)    {        //第一种情况:只有一行,且当光标移到最后一列时        if ((base.CurrentCell.ColumnIndex == (base.ColumnCount - 1)) && (base.RowCount == 1))        {            base.CurrentCell = base.Rows[base.RowCount - 1].Cells[0];            return true;        }        //第二种情况:有多行,且当光标移到最后一列时,移到下一行第一个单元        //if ((base.CurrentCell.ColumnIndex == (base.ColumnCount - 1)) && (base.CurrentCell.RowIndex < (base.RowCount - 1)))        //{        //    base.CurrentCell = base.Rows[base.CurrentCell.RowIndex + 1].Cells[0];        //    return true;        //}        if ((base.CurrentCell.ColumnIndex == (VisibleColumnCount - 1)) && (base.CurrentCell.RowIndex < (base.RowCount - 1)))        {            base.CurrentCell = base.Rows[base.CurrentCell.RowIndex + 1].Cells[0];            return true;        }        isEnterKey = true;        //ProcessDataGridViewKey(new KeyEventArgs(Keys.Enter));    }    return base.ProcessRightKey(keyData);}protected override bool ProcessDataGridViewKey(KeyEventArgs e){    if (e.KeyCode==Keys.Enter)    {        isEnterKey = true;        return this.ProcessRightKey(e.KeyData);    }    return base.ProcessDataGridViewKey(e);}protected override void OnCellEnter(DataGridViewCellEventArgs e){    if (isEnterKey && (!CurrentCell.Visible || CurrentCell.ReadOnly))    {        SendKeys.Send("{Enter}");    }    else    {        isEnterKey = false;        base.OnCellEnter(e);    }}
[解决办法]
编辑完 回车会触发 CellEndEdit事件,这里处理一下
[解决办法]
按楼主所所想的方法,何时跳转,可以放到CurrentCellDirtyStateChanged事件中。
[解决办法]
/// <summary>
/// 实现按下Enter键是移动到下一单元格,不换行
/// </summary>
/// <param name="msg"></param>
/// <param name="keyData"></param>
/// <returns></returns>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter)
{
SendKeys.Send("{tab}");
}
return base.ProcessCmdKey(ref msg, keyData);
}

这个是不换行的 ,你可以试着改成换行的。。。

热点排行