2012-08-26 72 views
1

我想修改與導航鍵相關的datagridview的當前行爲。目前的行爲是跳轉到下一行和同一列,我要跳到下一列和同一行,所以我已實現了以下keyDown事件:使用回車鍵覆蓋datagridview的導航不起作用

private void dataGridView1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     int numCols = this.dataGridView1.ColumnCount; 
     int numRows = this.dataGridView1.RowCount; 
     DataGridViewCell currCell = this.dataGridView1.CurrentCell; 
     if (currCell.ColumnIndex == numCols - 1) 
     { 
      if (currCell.RowIndex < numRows - 1) 
      { 
       this.dataGridView1.CurrentCell = this.dataGridView1[0, currCell.RowIndex + 1]; 
      } 
     } 
     else 
     { 
      this.dataGridView1.CurrentCell = this.dataGridView1[currCell.ColumnIndex + 1, currCell.RowIndex]; 
     } 
     e.Handled = true; 
    } 
} 

的問題是,上述事件不是上壓,儘管我已經預訂到DataGridView keydown事件進入關鍵升起正確地做:

this.dataGridView1.KeyDown += new KeyEventHandler(dataGridView1_KeyDown); 

因此認爲,在輸入按鍵的當前行爲繼續被默認:下一行和同一列。

任何想法?

回答

0

你試過KeyUp嗎?我猜想在KeyUp上發生移動到另一行的默認行爲,給它一個測試,按回車並按住它,看看它是否向下移動一列,或者它是否等待你鍵入。也可能是按鍵,可能會測試每個這些看到,因爲您的事件可能會在默認事件行爲之前觸發。

另外,你是某些有事件訂閱正在執行的代碼?如果它在標準的位置,我會這麼假設,但我只是拋出這種可能性,你把那條線置於一個不能執行的方法中以防萬一。

+0

是的,我試過KeyUp和KeyPress,但它不起作用。如果我按下Enter並按住它,它會連續移動到下一行和同一列,直到它到達最後一行。對於所有事件,keyUp,KeyDown和KeyPress,這種行爲是相同的。另外,我已經檢查過我訂購該事件的行是否正確執行,但是儘管訂閱已正確完成,事件KeyDown,KeyUp或KeyPress也不會觸發。然而,在我訂購這個地方的同一個地方,我會做其他的訂閱,比如cellParsing,這會引發火災。 – user1624552

+0

嗨,我發現了什麼情況:KeyUp,KeyDown和KeyPress僅針對類型爲datagridviewcheckboxcolumn和datagridviewbuttoncolumn的datagridview列觸發,但不適用於其他類型,如datagridviewcomboboxcolumn,datagridviewtextboxcolumn或自定義列。我不知道如何解決這個問題。 – user1624552

+0

也許事件需要附加到所選的實際列而不是gridview,可能是在單元級別處理keydown。 –

0
private void dataGridView2_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     e.SuppressKeyPress = true; 
     e.Handled = true; 
     SendKeys.Send("{tab}"); 
    } 
}