0

我在 gridview 中有 3 列 - 代码、数量、名称。如果单元格(说代码)处于编辑模式,按箭头或 Tab 键将触发“CellEndEdit”事件,然后将选择移动到下一个细胞。如果它是箭头键,我希望选择不同的单元格,如果它是选项卡,我希望选择另一个单元格。例如:
在右箭头键上:代码 -> 数量
在选项卡上按:代码 -> 名称

单元格进入编辑模式后,datagridview 的键事件(向下、向上、按下)不会触发。那么,当单元格处于编辑模式时,如何获取最后按下的键的值。我必须在 CellEndEdit 事件中编写代码/方法/函数。这可以是这样的:

private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)       
{  
  //Some calculations;  
  //Get the key if it is tab or arrow to decide which cell should be selected next  
 If((bool)OnKeyDown()==true)   
    then do this;
}          
void OnKeyDown(KeyEventArgs e)
 { 
   if(e.KeyValue==9)//tab key     
     return true;
 }
4

2 回答 2

0

使用这个解决方案link,我能够想出一些可以帮助你的东西。

首先,您要创建自己的用户类,该类派生自DataGridView并覆盖该ProcessCmdKey函数。无论您的单元格是否处于编辑模式,都会调用此函数。

public partial class MyDataGridView : DataGridView
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Tab)
        {
            this.CurrentCell = this.Rows[this.CurrentCell.RowIndex].Cells[1];
            return true;
        }
        else if (keyData == Keys.Right)
        {
            this.CurrentCell = this.Rows[this.CurrentCell.RowIndex].Cells[2];
            return true;
        }
        else
            return base.ProcessCmdKey(ref msg, keyData);
    }
}

您现在需要做的就是更改此函数内部的逻辑,以根据已按下的键转到相应的列,并使用此自定义类而不是默认的DataGridView.

于 2013-03-31T03:12:12.450 回答
0

我根据一个soln以这种方式解决了它。这里:
http ://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/0283fe97-c0ad-4768-8aff-cb4d14d48e15/

bool IsTabKey;
private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)       
{  
   //Some calculations;  
  //Get the key if it is tab or arrow to decide which cell should be selected next  
    If(IsTabKey==true)   
      //then do this;
}  
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if(GridViewSale.CurrentCell.ColumnIndex == 1 && keyData == Keys.Tab)
       IsTabKey = true;
       return false;
}
于 2013-03-31T12:53:05.273 回答