【问题标题】:How do I cancel numericupdown_valuechanged event?如何取消 numericupdown_valuechanged 事件?
【发布时间】:2019-01-07 12:52:39
【问题描述】:

这是我的代码。我正在尝试使用数字上下创建 DateTime。我得到异常

System.ArgumentOutOfRangeException: '1/3/0001 12:00:00 AM 的值' 对“值”无效。 'Value' 应介于 'MinDate' 和 '最大日期'。 参数名称:值'

我尝试使用数字上下的验证事件,但它没有触发。

 public DateTime ToDateTime(DateTime referencetime = default(DateTime))
    {
        if (referencetime == default(DateTime)) referencetime = DateTime.Now;
        DateTime returntime = referencetime;
        try
        {
            returntime = new DateTime(
                !Year.IsRelative ? Year.Value : referencetime.Year,
                !Month.IsRelative ? Month.Value : referencetime.Month,
                !Day.IsRelative ? Day.Value : referencetime.Day,
                !Hour.IsRelative ? Hour.Value : referencetime.Hour,
                !Minute.IsRelative ? Minute.Value : referencetime.Minute,
                !Second.IsRelative ? Second.Value : referencetime.Second
            );

            if (Year.IsRelative)
                returntime = returntime.AddYears(Year.Value);
            if (Month.IsRelative)
                returntime = returntime.AddMonths(Month.Value);
            if (Day.IsRelative)
                returntime = returntime.AddDays(Day.Value);
            if (Hour.IsRelative)
                returntime = returntime.AddHours(Hour.Value);
            if (Minute.IsRelative)
                returntime = returntime.AddMinutes(Minute.Value);
            if (Second.IsRelative)
                returntime = returntime.AddSeconds(Second.Value);
        }
        catch (Exception e) { }

DateTime.cs Design

我想取消 outofRange 异常结果的 value_changed 事件。我该怎么做?

【问题讨论】:

  • 您的try catch 是否正在处理该特定错误?
  • 哇,这个建筑概念很聪明!你真的确定你的控件实际上只是接受数字吗?确保“候选”值是有效值。试试 DateTime.TryParse
  • 是DateTimePicker产生的异常,可能是MonthCalendar。我们看不到它。这些控件的最小允许日期是 1753 年 1 月 1 日,即英格兰从儒略历切换到公历的那一天。较早的日期毫无意义。强烈争取 UI 设计不允许用户选择无效日期或当前和自定义日期/时间部分的奇怪组合。既然您似乎无论如何都在使用 DateTimePicker,那么您不妨改用它。

标签: c# winforms


【解决方案1】:

您可以在属性窗口以及以编程方式设置 NumericUpDown 控件的 MininumMaximum 属性,以避免不必要的范围。

您也可以使用Validating 事件取消或设置控件的任何其他值。我使用此事件将十进制值转换为 int(用户可以输入范围内的任何十进制值)。查看完整的工作项目here

如果您对此有进一步的疑问,请告诉我。

【讨论】:

  • 谢谢。我在 catch 块中处理了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2021-11-12
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多