none
wpf C# Class limité la saisi dans un TextBox à des chiffres RRS feed

  • Question

  • Bonjour, voici un extrait d'une classe qui va permettre dans une solution de limiter la saisi dans les TextBox à des chiffres.

    Cependant à la ligne 25 l'argument "e.Key" nest pas valide dans le code :

     if (Char.IsDigit(e.Key))
                {
                    //OK
                }

    Erreur CS1503 Argument 1 : conversion impossible de 'System.Windows.Input.Key' en 'char' 

    je ne comprend pas bien pourquoi ?

     public class NumericTextBox :System.Windows.Controls.TextBox
        {
            bool allowSpace = false;
            protected override void OnKeyUp(System.Windows.Input.KeyEventArgs e)
            {
                base.OnKeyUp(e);
                NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat;
                string decimalSeparator = numberFormatInfo.NumberDecimalSeparator;
                string groupSeparator = numberFormatInfo.NumberGroupSeparator;
                if (groupSeparator==((char)160).ToString())
                {
                    groupSeparator = " ";
                }
                string KeyInput = e.Key.ToString();
                if (Char.IsDigit(e.Key))
                {
                    //OK
                }
                else if (KeyInput.Equals(decimalSeparator) ||KeyInput.Equals(groupSeparator))
                {
                    //OK
                }
            }
        }


    JF Collombet ® CreateSpecificCulture

    mercredi 23 août 2017 16:03

Réponses

  • Bonsoir Jean-François,

    Y a plus simple. L'utilisation du PreviewTextInput

    Côté XAML : 

     <TextBox Name="NumberTextBox" Width="250" Height="20"
                     PreviewTextInput="NumberValidationTextBox" />

    Côté C# : 

            private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
            {
               
                    Regex regex = new Regex("[^0-9]+");
                    e.Handled = regex.IsMatch(e.Text);
                
            }

    J'espère que j'ai bien répondu à votre question.


    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    mercredi 23 août 2017 16:20
  • L'erreur vous dit exactement pourquoi: Key est une enumération et non pas un Char.

    Vous faites la conversion de e.Key.ToString, pourquoi vous ne l'utilisez pas?

    Faites donc:

    string KeyInput = e.Key.ToString(); if keyInput.All(char.IsDigit)

    {

    et regardez les détails pour le test IsDigit, string vide etc...


    mercredi 23 août 2017 16:47

Toutes les réponses

  • Bonsoir Jean-François,

    Y a plus simple. L'utilisation du PreviewTextInput

    Côté XAML : 

     <TextBox Name="NumberTextBox" Width="250" Height="20"
                     PreviewTextInput="NumberValidationTextBox" />

    Côté C# : 

            private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
            {
               
                    Regex regex = new Regex("[^0-9]+");
                    e.Handled = regex.IsMatch(e.Text);
                
            }

    J'espère que j'ai bien répondu à votre question.


    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;

    mercredi 23 août 2017 16:20
  • L'erreur vous dit exactement pourquoi: Key est une enumération et non pas un Char.

    Vous faites la conversion de e.Key.ToString, pourquoi vous ne l'utilisez pas?

    Faites donc:

    string KeyInput = e.Key.ToString(); if keyInput.All(char.IsDigit)

    {

    et regardez les détails pour le test IsDigit, string vide etc...


    mercredi 23 août 2017 16:47