¿Cómo detecto claves en minúsculas usando la enumeración de claves en C #?

for (Keys k = Keys.A; k <= Keys.Z; k++)
{
    if (KeyPress(k))
        Text += k;
}

Este código detecta los botones de tecla que presioné en mi teclado e imprimirá qué tecla se presionó en la consola. Sin embargo, presioné 'a' en el teclado pero aparece como 'A'. ¿Cómo puedo solucionar esto?

preguntado el 17 de noviembre de 11 a las 14:11

Has comprobado Keys.Modifiers? -

2 Respuestas

Este es un problema que se encuentra a menudo. El problema es que XNA no está orientado a obtener entrada textual desde un teclado. Está orientado a obtener el estado actual de cada tecla del teclado.

Si bien puede escribir código personalizado para verificar cosas como si se mantiene presionada la tecla shift, etc., ¿qué pasa con los teclados que no son los que está usando (por ejemplo, idioma diferente, diseño diferente)? Lo que hace la mayoría de la gente es que Windows lo haga por usted.

Si desea que el texto aparezca como se espera, básicamente debe volver a crear algunas cosas y hacer que Windows lo haga por usted.

Vea la publicación de Promit aquí: http://www.gamedev.net/topic/457783-xna-getting-text-from-keyboard/

Uso:

Agregue su código a su solución. Llama EventInput.Initialize in your game'sInitialize` método y suscríbase a su evento:

EventInput.CharEntered += HandleCharEntered;

public void HandleCharEntered(object sender, CharacterEventArgs e)
{
    var charEntered = e.Character;
    // Do something with charEntered
}

Nota: Si permite que se ingrese cualquier carácter (por ejemplo, extranjeros con diéresis, etc.) asegúrese de SpriteFont los apoya! (De lo contrario, tal vez solo verifique que su fuente la admita antes de agregarla a su cadena de texto o haga que la fuente de sprite use un carácter especial 'no válido').

respondido 18 nov., 11:11

Hola, gracias por tu respuesta. Solo estoy haciendo un sistema de chat simple con C # para mi trabajo de curso. Así que estoy usando un teclado estándar en inglés de EE. UU. Solo necesito que la carcasa superior y la carcasa inferior funcionen correctamente. ¿Hay algún código de muestra? He leído Promit Post pero no lo entiendo. Soy bastante nuevo en C #. - Zainu

Aquí está mi clase que hace lo de charlar: Zainu

¿Puedo preguntar después de haber copiado "Public class CharacterEventArgs" en mi explorador de soluciones, qué debo agregar a mi clase de chat (TextEntry.cs) para que funcione? - Zainu

Pon todas las clases en tu solución, no solo las CharacterEventArgs, luego, como dice en la publicación, llama InputEvent.Initialize en tu Game. Initialize método y suscríbete al CharEntered evento. - George Duckett

@ user1002229: actualicé mi respuesta, vea mi comentario arriba. - George Duckett

Después de mirar el código proporcionado, debería ser una simple modificación:

[...]
for (Keys k = Keys.A; k <= Keys.Z; k++)
{
  if (KeyPress(k))
  {
      if (keyboardState.IsKeyDown(Keys.LeftShift) || keyboardState.IsKeyDown(Keys.RightShift)) //if shift is held down
          Text += k.ToString().ToUpper(); //convert the Key enum member to uppercase string
      else
          Text += k.ToString().ToLower(); //convert the Key enum member to lowercase string
  }
}
[...]

respondido 18 nov., 11:21

Hola, ¿cómo verifico si el bloqueo de mayúsculas está activado / no activado? - Zainu

Tenga en cuenta que en lugar de recorrer cada tecla en cada cuadro, también puede recorrer keyboardState.GetPressedKeys(). - Luc

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.