none
Separador decimal en una aplicacion WPF RRS feed

  • Pregunta

  • Buenas noches,

     

    Quiciera saber como hacer que en un Textbox de mi aplicaion WPF cuando presione en el teclado numerico el punto decimal me aparesca coma.

    De hecho en la configuracion regional del equipo el separador decimal es "," (coma).

    saludo.

     

     

     

    jueves, 22 de abril de 2010 23:52

Respuestas

  • Hola Lindbergh.

    En realidad no existe ninguna sentencia, esto es debido a que una cosa es el dispositivo de entrada y su cultura definida mediante el SO y otra es un control de texto, donde lo que se escribe es inherente a cualquier tipo de logica, tan solo es un control donde se asigna el codigo ascii del dispositivo de entrada, de modo que para escribir una coma donde esta un punto deberias cambiarte la region del sistema operativo para establecer un teclado en el que esto coincida.

    De modo que para realizarlo tienes que hacer lo que comenta Corsario, o tambien si vas a usar mucho el textBox lo ideal es que te crees una clase heredando de TextBox donde implementes el metodo para sustituir la tecla:

     

     class TextBoxEx : TextBox
     {
      protected virtual void OnPreviewTextInput(TextCompositionEventArgs e)
      {
       // TODO: insertar el codigo para sustituir la tecla o pulsarla mediante
       // la API WIN32
    
       // evento manejado
       e.Handled = true;
      }
     }

     

    en WinForms era bastante facil con la funcion sendKeys, pero en WPF no existe y debes optar por la opcion que te ha presentado corsario, o la utilizacion de la api Win32 como puedes ver en el siguiente link:

    http://ascendedguard.com/2007/08/wpf-virtual-keyboard.html

    Por cierto, puedes obtener la cultura de tu SO mediante la siguiente propiedad para actuar en consecuencia:

    System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator;

     

    Saludos
    David González
    jueves, 29 de abril de 2010 15:22
  • ¡Hola!

    Debes de controlar uno de los eventos key. Hay conviertes el sender a Textbox. En VB.net es con un CType.

    Una vez aqui el propio TextBox dispone de un método Remplace y sustituyes el punto por la coma.

    Ejemplo:

     

     

    Private Sub Textbox_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles _Textbox.KeyUp 
    
    Try
    
    If CChar(ChrW(e.Key)) = CChar(ChrW(46)) Then 
    
    Textbox.remplace(",",".") 'Si el evento es tardío
    
    End If
    
    'Si el evento es temprano
    
    'Textbox.text=Textbox.text & ","
    
    Catch ex As Exception
    
    Er(ex)
    
    End Try
    
    End Sub
    
    
    

    La tabla donde puedes mirar el código ACSSI de las teclas.

    http://www.ascii.cl/es/ 

    viernes, 23 de abril de 2010 9:20

Todas las respuestas

  • ¡Hola!

    Debes de controlar uno de los eventos key. Hay conviertes el sender a Textbox. En VB.net es con un CType.

    Una vez aqui el propio TextBox dispone de un método Remplace y sustituyes el punto por la coma.

    Ejemplo:

     

     

    Private Sub Textbox_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles _Textbox.KeyUp 
    
    Try
    
    If CChar(ChrW(e.Key)) = CChar(ChrW(46)) Then 
    
    Textbox.remplace(",",".") 'Si el evento es tardío
    
    End If
    
    'Si el evento es temprano
    
    'Textbox.text=Textbox.text & ","
    
    Catch ex As Exception
    
    Er(ex)
    
    End Try
    
    End Sub
    
    
    

    La tabla donde puedes mirar el código ACSSI de las teclas.

    http://www.ascii.cl/es/ 

    viernes, 23 de abril de 2010 9:20
  • Buenos dias,

    gracias por tu respuesta, eso yo lo e pesado pero creo que debe de haber una sentencia o configuracion donde le puede decir cual va ser el sepador  decimal sin necesidad de evaluar el textbox.

    viernes, 23 de abril de 2010 17:05
  • Hola Lindbergh.

    En realidad no existe ninguna sentencia, esto es debido a que una cosa es el dispositivo de entrada y su cultura definida mediante el SO y otra es un control de texto, donde lo que se escribe es inherente a cualquier tipo de logica, tan solo es un control donde se asigna el codigo ascii del dispositivo de entrada, de modo que para escribir una coma donde esta un punto deberias cambiarte la region del sistema operativo para establecer un teclado en el que esto coincida.

    De modo que para realizarlo tienes que hacer lo que comenta Corsario, o tambien si vas a usar mucho el textBox lo ideal es que te crees una clase heredando de TextBox donde implementes el metodo para sustituir la tecla:

     

     class TextBoxEx : TextBox
     {
      protected virtual void OnPreviewTextInput(TextCompositionEventArgs e)
      {
       // TODO: insertar el codigo para sustituir la tecla o pulsarla mediante
       // la API WIN32
    
       // evento manejado
       e.Handled = true;
      }
     }

     

    en WinForms era bastante facil con la funcion sendKeys, pero en WPF no existe y debes optar por la opcion que te ha presentado corsario, o la utilizacion de la api Win32 como puedes ver en el siguiente link:

    http://ascendedguard.com/2007/08/wpf-virtual-keyboard.html

    Por cierto, puedes obtener la cultura de tu SO mediante la siguiente propiedad para actuar en consecuencia:

    System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator;

     

    Saludos
    David González
    jueves, 29 de abril de 2010 15:22