【问题标题】:Detect when User is done editing in TextBox检测用户何时在 TextBox 中完成编辑
【发布时间】:2018-10-26 15:16:25
【问题描述】:

我正在尝试制作一个 Windows 表单,它在一些 ReadOnly 文本框中显示一堆数据库数据。在用户可以输入的表单上有一个单一的文本框,它本质上用作搜索参数。

我希望用户条目的设置方式是,一旦用户在文本框中完成输入,表单其余部分的数据就会更新。

现在我尝试使用TextChanged 事件来执行此操作,但问题是每次文本框中发生任何事情时TextChanged 都会触发。因此,如果我输入“Hello World”,该事件将触发 11 次。

有没有办法检测用户何时在文本框内完成编辑?如果有,你是怎么做的?

【问题讨论】:

  • 除非他们开箱即用,否则你怎么知道他们已经完成了? IE。离开事件。或者也许通过点击一个按钮?
  • 您可以:1) 使用Leave 事件在用户退出TextBox 时得到通知 2) 使用验证事件(+- 相同) 3) 指示按下@987654326 @ 确认输入 4) 使用 Commit Button。更多(我会避免TextChanged)。
  • 这就是为什么在文本框旁边有一个搜索按钮。
  • 问题是“用户完成”的定义是什么,用户什么时候完成?什么时候停止打字?如果是一个老人每 5 秒输入 1 个字符怎么办?你不能只是“猜测”用户完成了,你需要有一种方法让用户告诉你他已经完成了,最好的方法总是一个简单的按钮,上面写着“搜索”,如果你出于某种原因想要一个不太直观的方式,您可以使用 textbox.focuslost ,因此当他单击其他任何位置时它会触发,同时捕获字符并检查它的 Intro 键

标签: vb.net winforms textbox


【解决方案1】:

我以前用计时器做过这个。将 Timer.start() 事件放在 TextChanged 中。在 Timer_tick 处理程序中更新您的表单。将计时器设置为 1500 左右。试验你喜欢的值。

private void textBox1_TextChanged(object sender, EventArgs e)
{
    timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
    timer1.Stop();
    UpdateForm();
}

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    相关资源
    最近更新 更多