【问题标题】:How to avoid/warn user for wrong entries in Windows Application如何避免/警告用户在 Windows 应用程序中输入错误
【发布时间】:2010-01-04 23:45:26
【问题描述】:

如何通过显示 MSG 框告诉用户他输入的格式不正确 我有文本框,我只想获取数字,如果用户输入字母而不是向他显示消息

int level;
        if(range.Text.GetType)
        {
            MessageBox.Show("Please Enter Only Number");
        }
        else
        {
        level = int.Parse(range.Text);
        // use the randomGenerator function according to the number i entered.
        TheRandNo = randomGenerator.Next(level);
        //Activate the guess button.
        GuessBT.Enabled = true;
        label4.Text = x.ToString();
        // To start the game with the green color
        BackColor = Color.Green;
        }

提前感谢

【问题讨论】:

    标签: c#


    【解决方案1】:

    您可能想改用MaskedTextBox,它只允许输入特定字符(在本例中为数字)。

    【讨论】:

      【解决方案2】:
      if(!int.TryParse(range.Text, out level))
      {
        MessageBox.Show("Please Enter Only Number");
      }
      else
      {
        // No need for your Parse now, level has the right value already
      }
      

      【讨论】:

      • 你能告诉我如何在不通过(out level)的情况下使用tryParse,因为它并不总是在那里......
      • 你不能。 .Net Framework 的 Try* 方法(例如 TryParse、TryGetValue)的整个想法是返回一个布尔值,表示尝试是否成功。结果在 out 参数中返回。您在这里有两个选择。 a)无论如何你都想使用这个值(然后像我上面写的那样做) b)你只想知道这是否是一个 int。在这种情况下,您可以选择 Bruno 的第一个解决方案,或者 - 定义一个您不使用的本地 int 并坚持使用 int.TryParse()。
      【解决方案3】:

      类似:

      if (!range.Text.All(c =>  char.IsDigit(c)))
         MessageBox.Show("Please Enter Only Number");
      

      或者你也可以使用int.TryParse:

      int level;
      if(!int.TryParse(range.Text, out level))
      {
         MessageBox.Show("Please Enter Only Number");
      }
      else 
      {
         // ...
      }
      

      这取决于您需要解析的数字类型。

      【讨论】:

      • 你能告诉我如何在不通过(out level)的情况下使用tryParse,因为它并不总是在那里......
      【解决方案4】:

      就个人而言,我会接受 R. Bemrose 的上述建议,使用 MaskedTextBox;也许我会在它附近放一个标签(或者在 TextBox 激活并获得焦点时显示一个标签)告诉用户只输入数字。

      但是...如果您“决心”向最终用户显示消息,让我建议一个替代 'MessageBox 的替代方案,它对应用程序流程的“破坏性”要小得多,恕我直言。

      考虑使用 MaskedTextBox,您可以访问以下事件:

      private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
      {
          Console.WriteLine("rejected char");
      }
      
      private void maskedTextBox1_TextChanged(object sender, EventArgs e)
      {
          Console.WriteLine("accepted char");
      }
      

      当用户输入的字符不符合 Mask 定义的条件时:将触发 MaskInputRejected 事件:如果发生这种情况,您可以显示一个标签,例如,作为 MessageBox 的替代品。

      如果用户输入了一定次数的无效字符,您甚至可以维护一个计数器变量,说明在“当前会话”中调用了多少次 MaskInputRejected 事件,并放置一个“不祥的”消息框 :)。

      当输入一个有效字符时,在你的例子中是一个数字,TextChanged 事件被触发:然后你可以隐藏标签。

      如果这是一个“游戏”,您可以使用带有透明背景的“眨眼闪烁标签”来做一些事情(使用计时器或其他东西让它眨眼或眨眼)。

      对于任何给定的 UI 设计,恕我直言,没有“一刀切”的答案,但如果您是 WinForms .NET 及其控件的新手,我会敦促您花一些时间学习和使用MaskedTextBox 确实是一个非常方便的控件,具有许多功能。

      只是在奇怪的情况下,您在这里使用 WPF(如果是,请将该标签添加到您的问题中)请参阅:SO thread on WPF and MaskedTextBox

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-21
        • 2020-10-28
        • 2018-08-03
        • 1970-01-01
        • 2019-03-18
        • 1970-01-01
        • 2018-08-01
        相关资源
        最近更新 更多