【问题标题】:Textbox changing state文本框更改状态
【发布时间】:2011-03-14 16:59:56
【问题描述】:

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

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

所以,我的问题是如何以这样一种方式实现,即在更改文本后而不像 TextValidated 行为那样移动指针,然后文本框事件将引发。

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

【问题讨论】:

  • 这是 WebForms、WinForms、WPF、Silverlight 还是什么?
  • 如果不是文本框失去焦点,您确定用户何时完成输入的标准是什么?
  • 我认为一旦用户停止输入一段时间(在失去焦点之前),他想做一些事情。
  • 是winform。是的。吉米是对的,一旦用户停止输入一段时间,就做点什么!

标签: c#


【解决方案1】:

问题是“你什么时候知道用户结束了?”。他是真的完成了输入,是在想下一步应该输入什么,还是只是在键盘上寻找正确的键?

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

示例代码

    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.
}

【讨论】:

    【解决方案2】:

    可能是这样的……

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

    • 发生这种情况时保存时间戳 在本地变量中。
    • 如果之前有 时间戳已被缓存(即在 控件标记属性,或 哪里),比较 两个时间戳,看看 x 的数量 时间已经过去(之间的延迟 文本更改)。如果大于 x 时间量,假设用户 已完成打字并做任何事情 你想要的
    • 在某处再次缓存最新的时间戳(在标签或其他地方)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2013-02-02
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多