2012-09-04 121 views
1

我将我的表单的KeyPreview设置为true。为什么我的事件处理程序只输入一次?

我试图移动到下一个单元格,如果DataGridView单元格已经有一个值。我有这样的代码:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if (this.ActiveControl == dataGridViewPlatypus) 
    { 
     var currentCell = dataGridViewPlatypus.CurrentCell; 
     if (currentCell.Value.ToString().Length == 1) 
     { 
      ;//Now what? 
      SendKeys.Send("{DOWN}"); 
     } 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

设置于内“如果”我到那里,我第一次在一个单元格中输入一个值(断点想必它要么是长度为0或1的长度,但看着在当前currentCell的值,它是“格式化文本”值==“”,我没有看到任何其他可能的属性来辨别单元格内容是什么)。

“如果”失败,并且它下降到“返回基地”。线。

当我在单元格中输入第二个值时(例如单元格中的可见内容从“2”更改为“22”),我甚至没有达到断点。为什么???

注:这是一个问题,我问这里的变化:How can I programmatically move from one cell in a datagridview to another?

回答

1

现在你正在测试,如果在框中的值的文本表示有且只有一个字符的长度。

如果我正确理解你的问题,你应该尝试 currentCell.Value.ToString().Length > 0

+0

应该总是要么是0或1,因为当1应该下降到下一个单元格。无论如何,事件处理程序只能输入一次。 –

相关问题