【问题标题】:Check if a character typed in a PasswordBox is numeric or not检查在 PasswordBox 中键入的字符是否为数字
【发布时间】:2015-05-05 09:02:34
【问题描述】:

我研究了一下,似乎 xaml 中没有 InputScope 用于密码框。我正在设置一个 pin 字段,只想要数字。如果图我将需要检查按下的键是否是 C# 中的数字,然后再将其写入框。我该怎么做呢?它还将检查长度是否为 4,以便它可以自动登录,我已经知道该怎么做。

【问题讨论】:

    标签: c# xaml windows-store-apps windows-8.1


    【解决方案1】:

    您可以在PasswordBox 上订阅KeyDown 事件。最大长度可以通过设置MaxLength属性来限制。

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        if ((e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9))          
        return;
    
        e.Handled = true;            
    }
    

    【讨论】:

    • 这很棒!我似乎已经用电话号码文本框做过一次,甚至不记得了。我还添加了 tab 和 shift+tab,以便在创建 pin 并确认它时,用户仍然可以 tab 和 shift tab。
    【解决方案2】:
    @edited
    
    Xaml:
    <PasswordBox x:Name="passwordBox" MaxLength="4" PasswordChanged="PasswordBox_PasswordChanged"/>
    
    private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
    {
        string password = "pass";
        int result;
        bool isPasswordNumeric = int.TryParse(password , out result);
    
        if (!isPasswordNumeric)
            return;
    }
    

    【讨论】:

      【解决方案3】:

      每次更改密码时,即每次击键时,您都可以丢弃所有非数字字符。用户的体验是控件只响应数字字符。

      private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
      {
          var passwordBox = sender as PasswordBox;
          string inputString = passwordBox.Password;
          string cleanString = Regex.Replace(inputString, @"[^0-9]", "");
          passwordBox.Password = cleanString;
          return;
      }
      

      请注意,正则表达式中的插入字符 (^) 会否定搜索字段,即它将除 0-9 之外的所有字符替换为空字符串。

      使用 Pawel Maga 帖子中的 XAML。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-29
        • 1970-01-01
        • 1970-01-01
        • 2013-02-06
        • 2017-11-28
        • 2017-07-03
        相关资源
        最近更新 更多