2010-12-03 14 views
6

Tengo una forma de cambio con algunos cuadros de edición.Restringir solo a los caracteres en inglés

¡El formulario también se puede cargar en otros idiomas, como en chino! el requisito es que ciertos cuadros de texto solo deberían aceptar caracteres en inglés para Ejemplo. Cuando el usuario escribe en el cuadro Tex 1, debe estar en inglés ¿En qué caso en los cuadros de texto 2 y 3 debería estar en chino?

¿Es posible hacer algo como esto?

Respuesta

3

Sí, ciertamente es posible. Puede agregar un controlador de eventos de validación que verifique el carácter. Podría tener un diccionario de caracteres permitidos, o si restringe el carácter a una determinada codificación (quizás UTF-8), podría comparar el carácter con un rango de caracteres usando < y >.

Para ser más específicos: Puede manejar el evento KeyPress. Si e.KeyChar no es válido, configure e.Handled en true.

Prueba esto:

private void textBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (System.Text.Encoding.UTF8.GetByteCount(new char[] { e.KeyChar }) > 1) 
    { 
     e.Handled = true; 
    } 
} 
+0

muy buena elección, pero ID ir con una lista de caracteres permitidos en vez, usando un foreach ... si nuestro char es igual a cualquiera de los caracteres de la lista, establezca el evento para el retorno manipulados y, otra cosa establézcalo en falso – Machinarius

+0

En ese caso, no debe usar un foreach. En su lugar, use 'List .Contains()'. – Reinderien

+0

utilicé su poder y funciona muy bien, pero cuando copio y pego, lo permite, ¿podría darme una pista de solución? –

0

Para copiar y pegar mango, pruebe lo siguiente. Puede que no sea la mejor solución, pero recortará caracteres que no sean UTF8.

private void Control_KeyDown(object sender, KeyEventArgs e) 
    { 
     //Prevent the user from copying text that contains non UTF-8 Characters 
     if (!e.Control || e.KeyCode != Keys.V) 
      return; 

     if (Clipboard.ContainsText() && 
      Clipboard.GetText().Any(c => System.Text.Encoding.UTF8.GetByteCount(new[] {c}) > 1)) 
     { 
      char[] nonUtf8Characters = 
       Clipboard.GetText().Where(c => System.Text.Encoding.UTF8.GetByteCount(new[] {c}) <= 1).ToArray(); 

      if (nonUtf8Characters.Length > 0) 
      { 
       Clipboard.SetText(new String(nonUtf8Characters)); 
      } 
      else 
      { 
       Clipboard.Clear(); 
      } 

      e.Handled = true; 
     } 
    } 
Cuestiones relacionadas