当文本框聚焦时更新文本框文本到数据库

4

我正在寻找最佳解决方案,当文本框仍然保持焦点时,更新文本框的文本值到数据库。 我不想在TextChanged或Leave事件中执行此操作,因为我需要在文本框仍然包含焦点且用户停止输入时从数据库查询实际值。


这很奇怪,我想看看我们在这里得到什么答案。 - V4Vendetta
在TextChanged事件中,文本框仍然保持焦点。 - Renatas M.
1
如果它不是在文本更改或焦点离开时触发,那么另一个(唯一的?)可能性就是每隔X秒触发,对吗?或者我错过了什么? - Ranhiru Jude Cooray
在用户停止输入后立即返回已翻译的文本。 - Cornel
2个回答

1
Every X seconds (Using a Timer)

    if (txtMyTextBox.Text != previousText)
       previousText = txtMyTextBox.Text;
    else //(if the text is the same before X seconds)
         //User has stopped typing! Save it to the database
         //Stop the timer!

txtMyTextBoxTextChange 事件将检查 Timer 是否已停止,如果是,则重新启动它。

X 秒后,如果没有输入,则认为用户已停止输入。

考虑到有很多文本框,这可能会变得非常麻烦 :S 因此我完全同意应该有更好的方法。


0

我会选择另一种方式:

首先定义您认为用户停止输入的时间。失去焦点是一个非常好的指示,因为用户明确地离开了文本框。超时不太可靠,因为用户可能打字速度慢或分心。程序然后更改文本可能会让用户感到困惑。

您甚至可以创建一个两值文本框控件:一个输入字段接受用户输入,另一个(只读)字段显示数据库中的当前值。该控件可能有一个按钮,允许用户接受来自数据库的值。

所有这些都感觉像是试图回避经典乐观并发问题的不良副作用:如果在编辑期间数据库中的值发生更改怎么办?

您正在创建的解决方案具有很多开销,可能不值得(查看网络流量...)。只允许用户输入一个值。将其传回数据库,捕获冲突并允许用户处理冲突。这将更好地扩展,并且更容易实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接