【问题标题】:TextBlock accepting only digits in Windows Phone 7TextBlock 在 Windows Phone 7 中只接受数字
【发布时间】:2013-10-15 15:11:45
【问题描述】:

我正在创建一个应用程序,我不希望用户使用字母或特殊字符,但数字(数字)除外。用户只能输入数字...如果用户输入字母或特殊字符,则会显示错误消息...我找到了“空部分”的解决方案,即

if (uservalue == "" )
  textblock.text = "Sorry! enter digit please"
else
  textblock.text=y.toString();

如果用户只是按下“点击我”按钮而没有在文本框中输入数字,那么文本块中会出现“对不起!请输入数字”的消息。我想知道如何解决字母和特殊字符的问题?

【问题讨论】:

  • 您应该编辑您的标题。如果您的标题有意义,就会有更多人阅读并回答您的问题。

标签: c# windows-phone-7


【解决方案1】:

您可以通过在 TextBox 中添加以下内容来更改手机键盘,使其仅显示数字:

<TextBox .... InputScope="Digits" ....>

这仍将添加“。”键盘上的键。为了防止用户键入它,您将 KeyUp 事件添加到 TextBox 并执行以下操作:

private void KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
    TextBox txt = (TextBox)sender;
    if (txt.Text.Contains('.'))
    {
        txt.Text = txt.Text.Replace(".", "");
        txt.SelectionStart = txt.Text.Length;
    }
}

【讨论】:

  • KeyUp 事件可以改进:只需检查e.KeyCode 是否是“.”的那个。如果是这样,请e.Handled = true
  • 感谢佩德罗的建议;)
  • 当用户的区域发生变化时会发生什么?不会'。成为一个 ',' ?似乎无论如何都应该使用 Char.IsDigit。
  • 这是一个有趣的问题。我不确定不同地区的键盘会发生什么。如果它发生变化,那么将 InputScope 定义为 Digits 并在 KeyUp 上验证 IsDigit 是最佳解决方案。我必须检查一下。谢谢威尔梅尔。
【解决方案2】:

您可以使用TryParse 方法:

int digit;
if (!int.TryParse(uservalue, out digit))
{
    textblock.text = "Sorry! enter digit please";
}
else
{
    textblock.text = digit.toString();
}

这假定用户应该输入一个有效的 32 位整数。如果您需要处理可以输入大量数字的较大值,您可以使用以下正则表达式 \d+ 来验证输入:

if (!Regex.IsMatch(uservalue, @"\d+"))
{
    textblock.text = "Sorry! enter digit please";
}
else
{
    textblock.text = uservalue;
}

【讨论】:

    【解决方案3】:

    您可以在 xaml 中使用 TextBox 并设置 TextBox.InputScope=NumberInputScope

    【讨论】:

      【解决方案4】:

      试试这个肯定会起作用,将 h 和 k 声明为整数变量。文本框只允许数字

      private void txt3_KeyPress(object sender, KeyPressEventArgs e)
          {
      
              for (int h = 58; h <= 127; h++)
              {
                  if (e.KeyChar == h)             //58 to 127 is alphabets tat will be         blocked
                  {
                      e.Handled = true;
                  }
      
              }
      
              for(int k=32;k<=47;k++)
              {
                  if (e.KeyChar == k)              //32 to 47 are special characters tat will 
                  {                                  be blocked
                      e.Handled = true;
                  }
      
              }
      
      
      
          }
      

      【讨论】:

        【解决方案5】:

        你可以使用正则表达式

        【讨论】:

          【解决方案6】:

          根据 Rithc Melton 所说,这里是所有输入范围选项的列表

          Input scope list and tutorial

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-02
            • 1970-01-01
            相关资源
            最近更新 更多