gpt4 book ai didi

c# - 为什么 DateTimePicker 在 Leave 事件处理程序中返回过时的值?

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:59 26 4
gpt4 key购买 nike

在使用 DateTimePicker 作为时间编辑器时,我遇到了一个奇怪的行为......我想检查 Leave 事件处理程序中新输入的值,目的是在用户编辑小时、然后是分钟、然后是秒时不处理每个 ValueChanged 事件。但似乎如果用户只编辑了小时,并且新值只包含一位数字,则 Leave 事件处理程序中的 dateTimePicker1.Value 返回旧值。

要重现此行为,只需创建一个新表单,在其上放置一个 DateTimePicker 和一个 Button,然后添加以下代码:

    public TimeTestForm()
{
InitializeComponent();

dateTimePicker1.ShowUpDown = true;
dateTimePicker1.Format = DateTimePickerFormat.Time;
dateTimePicker1.Leave += new EventHandler(dateTimePicker1_Leave);
}

static string text;

void dateTimePicker1_Leave(object sender, EventArgs e)
{
text = dateTimePicker1.Value.TimeOfDay.ToString(@"hh\:mm\:ss");
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(dateTimePicker1.Value.TimeOfDay.ToString(@"hh\:mm\:ss"), text);
}

然后当项目启动时你会看到:

enter image description here

然后你按下:

  1. 说,1 在你的键盘上
  2. Tab 将焦点移至按钮
  3. Enter

然后查看消息:

enter image description here

这样的行为不会发生:

  1. 如果你用鼠标点击按钮
  2. 如果您将 DateTimePicker 中的焦点移动到分钟或秒
  3. 如果您输入包含两位数的小时

我该如何克服这个问题?或者,也许我可以使用其他事件来检查新值而不是 Leave


更有趣...如果我们稍微编辑一下代码:

    public TimeTestForm()
{
InitializeComponent();

dateTimePicker1.ShowUpDown = true;
dateTimePicker1.Format = DateTimePickerFormat.Time;
dateTimePicker1.Leave += new EventHandler(dateTimePicker1_Leave);
dateTimePicker1.ValueChanged += new EventHandler(dateTimePicker1_ValueChanged);
}

static string text;

void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
text = dateTimePicker1.Value.TimeOfDay.ToString(@"hh\:mm\:ss");
MessageBox.Show(text, "ValueChanged");
}

void dateTimePicker1_Leave(object sender, EventArgs e)
{
text = dateTimePicker1.Value.TimeOfDay.ToString(@"hh\:mm\:ss");
MessageBox.Show(text, "Leave");
}

我们可以看到一个好东西:

  1. ValueChanged 首先触发:

enter image description here

  1. Leave 在以下时间触发:

enter image description here

最佳答案

我发现在 LostFocus 事件处理程序中 datetimepicker1.Value 返回新值...所以我似乎可以使用它。

不过,我很想知道这里的工作原理的深入解释。

关于c# - 为什么 DateTimePicker 在 Leave 事件处理程序中返回过时的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25757840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com