2011-05-23 19 views
5

Bu, istemcilerin bana sorduğu bir kullanılabilirlik isteği için geçerlidir.Kullancım numpad Enter tuşuna bastığında tek bir Tuşu anahtarı nasıl gönderebilirim?

Öğrenciler için notlar yazarak bir datagridview ile çalışırlar. Bu yüzden hemen hemen zombi moduna giriyorlar ve sayılara dokunmaya başlıyorlar ve bir sonraki dikey seçime odaklanmak için sayısal tuş giriş tuşuna basabildiklerini daha kolay olacağını söylediler.

İşte kullanmaya çalıştığım buydu: beklendiği gibi

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

Ne yazık ki, çalışmıyor. Bazen bu tuşun birçok kez ateşlenmesi, odaklanmanın 2 veya 3 ya da 4 hücreyi aşağıya doğru kaydırmasına ve kullanıcıların odağını gerçekten sarmasına neden oluyor.

Bu işi nasıl yapabilirim ve müşterilerimi nasıl mutlu edebilirim?

+0

Bir dizi metin alanı kabul ettiniz mi? – sikas

+1

SendKeys.Send –

+0

'dan sonra bir e.handled = true eklemeyi deneyin Kullandıkları programın kaynağınız var mı? Öyleyse, neden sadece giriş anahtarını kabul etmiyor ve kullanmıyorsunuz - aksi halde pencerelerine bir IntPtr tutamacına ihtiyacınız olduğunu ve bu pencereye özel olarak göndermeniz gerektiğini düşünüyorum. –

cevap

0

keyDown'da true değerine ayarlanmış ve keyUp üzerinde false olarak ayarlanmış bir boolean kullanabilirsiniz.

Yalnızca boolean öğesi true olduğunda, sendKeys.Send öğelerinizi çalıştırın. Bu, olayın her tuşa basıldığında sadece bir kez ateşlenmesini sağlamalıdır.

Sıklıkla başka dillerde de gördüğümü gördüm, C# içinde daha iyi bir yol olup olmadığından emin değilim.

-1

Kullanıcı preslemeye girdiğinde odağı bir sonraki metin kutusuna ayarlayamaz mısınız? Sonraki metin kutusunu taşımak için TextBox.Focus() yöntemini kullanabilirsiniz.

+0

Bu, bir datagridview içindir, bir metin kutusuyla ilgisi yoktur. –

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

Bunu deneyin - Test ettim ve çalışıyor.

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

Eğer (düzenleme modunda olsun veya olmasın) o (.NET framework 3.5 ve 4.0), varsayılan olarak bir hücre iner DataGridView Enter tuşuna basın.

Bu, öncelikle ihtiyaç duyduğunuz işlevsellik değil mi?