【问题标题】:Using a loop to validate and then allow the user to input again使用循环进行验证,然后允许用户再次输入
【发布时间】:2013-02-19 20:23:36
【问题描述】:

我正在尝试在 C# 中验证我的 WPF 程序,以检查用户是否已将日期输入到我的 DatePicker 事件中。如果用户没有输入日期,我希望它让用户在再次运行整个程序之前重新输入数据。如果用户输入的数字小于 1 或大于 10,我也希望它执行相同的操作。但是目前它只是继续执行程序的其余部分,导致它稍后中断。

我的“文本框”事件称为 UserInput,我的 DatePicker 称为“RequestedDate”

我的代码:

if (int.TryParse(UserInput.Text, out numberEntered))
{

    while (DateRequested.SelectedDate == null)
    {
        MessageBox.Show("You have not input a valid date");
        Output.Text = "Please try again";

    }

       while (numberEntered < 1 || numberEntered > 10)
    {
        MessageBox.Show("You can only book tickets with values more than one or less than 10");
        Output.Text = "Please try again";
        break;
    }

    Output.Text = "Number of tickets selected: " + UserInput.Text + "Date: " + DateRequested.Text;
}

【问题讨论】:

  • 你不应该使用循环。只需使用if... 块或类似语句进行验证,并在出现问题时提示用户。让他们再次单击提交按钮并从头开始验证...
  • 您应该使用 wpf 方式并设置验证规则。你的代码的方式,你还不如使用winforms。
  • 您的第一个 while-loop-that should-be-an-if-statement 中似乎缺少一个中断。
  • 请注意,如果您不确定如何使用 ValidationRules,请查看 MSDN 上的示例msdn.microsoft.com/en-us/library/…

标签: c# wpf loops datepicker


【解决方案1】:

这里有几个问题:

1 - UI 元素不是“事件”,因此不存在 TextBox Event.

2 - UI is not Data。因此,您应该将逻辑抽象为 ViewModel 并针对它进行操作。

发布您的 XAML,我将编辑我的答案,展示实现此功能的正确方法。

【讨论】:

    【解决方案2】:

    您应该将您的TextBox.Text 绑定到DateTime 对象,如果输入的数据不正确,则会通过在TextBox 周围添加红色边框来向用户提供反馈。

    如果DateTime 是强制性的,您应该为您的TextBox 设置一个ValidationRule 进行验证,无需将所有这些UI 逻辑拖到您的模型中。

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 2021-03-12
      • 1970-01-01
      • 2015-12-27
      • 2016-03-08
      • 2014-10-11
      • 2021-11-04
      • 1970-01-01
      • 2013-10-21
      相关资源
      最近更新 更多