文本框更改状态

时间:2011-01-15 01:18:16

标签: c#

我的表单上有一个文本框。虽然我正在更改文本但尚未完成,如果我添加事件TextChanged,那么在我更改text =>期间此事件将会引发这不是我所期望的。

第二种情况:我使用了text_Validated或text_Validating事件,而不是使用TextChanged,它仅在鼠标指针指向文本框本身之外的其他区域后才起作用。

所以,我的问题是如何以这样的方式实现:在更改文本而不移动指针(如TextValidated行为)之后,文本框事件将会提升。

我希望你能理解我目前的问题,并就如何解决这个问题给我一个建议。

2 个答案:

答案 0 :(得分:0)

这样的事可能......

处理TextChanged事件并在其中添加以下内容:

  • 保存发生这种情况的时间戳 在本地var。
  • 如果有的话 时间戳已缓存(即在 控件Tag属性,或 在哪里),比较 两个时间戳,看看x的数量 时间已经过去了 文字变化)。如果它大于x 假定用户的时间量 已完成打字并做任何事情 你想要
  • 再次在某处(使用Tag或其他)缓存最新时间戳

答案 1 :(得分:0)

问题是“您何时知道用户已完成?”。他是否真的完成了他的录入,他只是在考虑下一步应该键入什么,还是只是在键盘上搜索正确的键?

所以你只能猜测。如果此猜测适合您,您可以在表单中添加Timer。将其设置为1000毫秒并在每个TextChanged事件上重置它(将Enabled切换为false并再次返回true)。而Tick事件只需添加您的GuessTheUserFinished函数。

示例代码

    timerFilterEntering.Interval = 1000;
    timerFilterEntering.Tick += (sender, e) =>
        {
            timerFilterEntering.Enabled = false;
            GuessTheUserFinished(myTextBox.Text);
        }

    myTextBox.TextChanged += (sender, e) =>
        {
            timerFilterEntering.Enabled = false;
            timerFilterEntering.Enabled = true;
        }

void GuesTheUserFinished(string inputSoFar)
{
    // ToDo: Whatever you like to do with the input.
}