2011-05-23 62 views
5

這純粹是爲了客戶詢問我的可用性要求。當我的用戶點擊數字鍵Enter鍵時,我怎樣才能發送一個Downkey鍵?

他們使用datagridview爲學生打分。所以他們幾乎進入殭屍模式並開始敲擊數字,他們告訴我,如果他們可以點擊數字鍵盤輸入鍵讓下一個垂直選擇成爲焦點,那將會更容易。

這裏就是我試圖使用方法:

private void dataGridView1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     SendKeys.Send("{DOWN}"); 
    } 
} 

不幸的是,它並沒有達到預期效果。有時它似乎會多次觸發該按鍵,導致焦點向下滾動2或3或4個單元格,並真正抖動用戶焦點。

如何使這項工作,讓我的客戶滿意?

+0

你有沒有考慮一個文本字段的數組? – sikas 2011-05-23 04:17:33

+1

嘗試在SendKeys.Send後添加e.handled = true – 2011-05-23 05:08:33

+0

他們正在使用的程序是否具有您可以訪問的源?如果是這樣,爲什麼不接受回車鍵並使用它 - 否則我認爲你需要一個IntPtr句柄到他們的窗口並專門發送到該窗口。 – 2011-05-23 22:44:18

回答

0

您可以使用在keyDown上設置爲true的布爾值,並在keyUp上設置爲false。

只有當布爾值爲true時才運行sendKeys.Send。這應該確保每次按鍵都只觸發一次事件。

這就是我在其他語言中經常看到的,我不確定在C#中是否有更好的方法。

-1

當用戶按下Enter鍵時,您不能將焦點置於下一個文本框中嗎? 您可以使用TextBox.Focus()方法移動下一個文本框。

+0

這是用於datagridview,與文本框無關。 – 2011-05-23 04:44:13

1
private void datagridView1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     bindingsource.MoveNext(); 
    } 
} 
1

試試這個 - 我已經測試過它,它工作。

private void datagridView12_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     int col = dataGridView12.CurrentCell.ColumnIndex; 
     int row = dataGridView12.CurrentCell.RowIndex; 
     if (row != dataGridView12.NewRowIndex) 
     { 
      if (col == (dataGridView12.Columns.Count - 1)) 
      { 
       col = -1; 
       row++; 
      } 

      dataGridView12.CurrentCell = dataGridView12[col, row + 1]; 
     } 

     e.Handled = true; 
     base.OnKeyDown(e); 
    } 
} 
0

當您按下在DataGridView輸入鍵(無論是在編輯模式下與否)它進入一個單元下降了默認值(在.NET Framework 3.5的和4.0)。

不是您首先需要的功能嗎?

相關問題