.NET确定控件的值已更改并最终确定

时间:2013-12-11 21:27:36

标签: vb.net controls frp

所有控件都提供某种事件来指示值已被修改。例如,当您输入文本框并开始键入每次击键时,会发生TextChanged事件。打开组合框并在下拉列表中选择新项目时,会收到SelectedIndexChanged个事件。

问题在于,在许多情况下,变化事件表示一系列变化,这些变化代表一些临时的未完成状态。例如当用户输入他的邮政编码时,没有理由查找城市和州,甚至在用户完成输入之前尝试验证它。当用户专注于运输方法组合并按下向上/向下键以导航组合值时,他试图找到他想要的那个,没有理由假设已经指定了运输方法,因此将其应用于发票。可能有意义的是等待,直到他在翻阅值之后退出组合框以发信号通知已选择装运方法。我们不想被一系列临时国家所打扰。

在我们的商店中,我们实施了Finalized事件,该事件仅在用户开始进行一些手动更改时触发(而不是像从DB设置邮政编码等程序化更改),然后再完成。对于不同的控件,必须以不同方式处理此Finalized事件;我不知道任何.NET功能可以使这更容易。

我现在唯一的想法是尝试使用Rx(功能反应式编程)之类的东西来适应这种情况。有没有想过一个简单的.NET方法来促进这个?

2 个答案:

答案 0 :(得分:0)

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

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

您也可以将leave事件用于组合框

答案 1 :(得分:0)

ValidatingValidated事件工作得很好;然而,这些名字具有误导性,因此我从未想过这些是合适的。

所有归功于Hans Passant的评论为我解决了这个问题。 (如果你回答,汉斯会将信用转给你。)