.NET确定控件的值已更改并已完成

3
所有的控件都提供了一些事件,用于指示值已被修改。例如,当您输入文本框并开始键入时,会出现一个 TextChanged 事件。当打开下拉列表中的组合框并选择新项时,您会得到一个 SelectedIndexChanged 事件。
问题在于,在许多情况下,更改事件信号表示一系列更改,这些更改代表某些临时的、未完成的状态。例如,当用户输入其邮政编码时,没有理由查找城市和州,甚至不尝试验证,直到用户完成输入为止。当用户将焦点放在运送方法组合框上,并按上/下箭头浏览组合框值以尝试找到所需值时,没有理由假定已指定运送方式,因此将其应用于发票。可能最好是等到他在分页浏览完值后退出组合框,才表示已选择了一种运输方式。我们不希望被一系列临时状态所困扰。
在我们的商店中,我们实现了一个“Finalized”事件,只有在用户开始进行一些手动更改(与从数据库设置邮政编码等编程更改相反)然后稍后完成时才触发。对于不同的控件,必须以不同的方式处理此“Finalized”事件;我不知道任何.NET功能可以使这更容易提供。
我现在唯一的想法是尝试使用类似Rx(函数响应式编程)的东西来适应这种情况。有没有简单的.NET方法可以促进这个过程?

2
只有当用户将焦点转移到另一个控件时,例如在另一个文本框中输入文本或单击“确定”按钮,您才能确信用户完成了输入。因此,您需要关注 Leave 事件。而 Validating 事件是专门设计用于此目的的。 - Hans Passant
这真的取决于应用程序。Google Maps很好地提供了一个下拉菜单,其项目随着每次按键而过滤。我还使用了一个计时器,它会在每次按键时重置,并在达到一定秒数时触发一个事件,从而触发数据库查询。 - djv
验证功能正常。但这个名称有些误导人,我们使用它与验证无关。我们只是在等待用户完成交互后,对其输入进行动态处理。 - Mario
2个回答

0

ValidatingValidated事件都能正常工作;但是,它们的名称有些误导,所以我从未意识到这些是合适的。

感谢Hans Passant的评论,解决了我的问题。(如果您回答,我将把功劳归给您。)


0

对于邮政编码文本框,您可以使用leave事件(当文本框失去焦点时发生),或者在textchanged事件中使用if语句:

if ziptextbox.text.length = 5 then
    'Hooray! do stuff here
end if

而且你也可以只使用combobox的"leave"事件。

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