我正在寻找将文本框文本值更新为DB的最佳解决方案,同时文本框仍包含焦点。我不想在TextChanged或Leave事件上这样做,考虑到我需要从DB查询实际值,即使文本框包含焦点并且用户停止输入。
答案 0 :(得分: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!
TextChange
事件txtMyTextBox
将检查Timer
是否已停止,如果是,请重新启动。
X 是之后的秒数,如果没有收到任何输入,则表示您确定该用户已停止输入。
鉴于有很多文本框,这可能会非常麻烦:S所以我肯定应该有一个更好的方法。
答案 1 :(得分:0)
我会采取另一种方式:
首先定义何时假设用户停止输入。 LostFocus是一个非常好的指示,因为用户明确地离开了文本框。超时不太值得信赖,因为用户可能在打字时很慢或者可能会分心。拥有该程序然后更改文本可能会使用户感到困惑。
您甚至可以创建一个双值文本框控件:一个输入字段接受用户输入另一个(只读)字段,显示数据库中的当前值。此控件可能有一个按钮,允许用户接受数据库中的值。
这就像试图躲避经典乐观并发问题的讨厌方面一样:如果数据库中的值在编辑期间发生了变化会怎么样?
您在此处创建的解决方案有很多开销,可能不值得(查看网络流量...)只需允许用户输入值即可。将其传递回数据库,捕获冲突并允许用户处理冲突。这样可以更好地扩展,并且更容易实现。