2011-05-23 16 views
5

Esto es puramente por una solicitud de usabilidad que mis clientes me han preguntado.¿Cómo puedo enviar una sola tecla de tecla abajo cuando mi usuario toca el teclado numérico Enter?

Funcionan con un datagridview escribiendo en las calificaciones para los estudiantes. Así que prácticamente entran en modo zombie y comienzan a tocar números, y me han dicho que sería más fácil si pudieran presionar la tecla Enter del teclado numérico para enfocar la siguiente selección vertical.

Esto es lo que he tratado de usar:

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

Por desgracia, no funciona como se esperaba. A veces parece disparar esa tecla muchas veces, haciendo que el foco se desplace 2 o 3 o 4 celdas hacia abajo y realmente agite el foco de los usuarios.

¿Cómo puedo hacer que esto funcione y hacer felices a mis clientes?

+0

¿ha considerado una matriz de campos de texto? – sikas

+1

intente agregar e.handled = true después de SendKeys.Send –

+0

¿El programa que están utilizando tiene la fuente a la que tiene acceso? Si es así, ¿por qué no simplemente acepta la tecla Entrar y la usa? De lo contrario, creo que necesita un identificador IntPtr para su ventana y para enviar específicamente a esa ventana. –

Respuesta

0

Puede usar un valor booleano que se establezca en verdadero en keyDown y establecer en false en keyUp.

Ejecute su sendKeys.Send solo cuando el valor booleano sea verdadero. Eso debería garantizar que el evento solo se dispare una vez por cada pulsación de tecla.

Así es como lo he visto hacerlo en otros idiomas, no estoy seguro de si hay una mejor manera de hacerlo en C#.

-1

¿No puede establecer el foco en el siguiente cuadro de texto cuando el usuario presiona enter? Puede usar el método TextBox.Focus() para mover el siguiente cuadro de texto.

+0

Esto es para una vista de cuadro de datos, nada que ver con un cuadro de texto. –

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

Prueba esto - Lo he probado y funciona.

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

Al pulsar Enter clave en el DataGridView (ya sea en el modo de edición o no) entra en una celda hacia abajo por defecto (en .NET framework 3.5 y 4.0).

¿No es la funcionalidad que necesita en primer lugar?

Cuestiones relacionadas