我正在验证用户输入控件,如文本框和下拉列表。我的问题是,验证容器。验证())在找到第一个无效控件后停止。我希望它在返回之前验证所有控件。我想一次向用户显示所有无效控件,而不是逐个显示。有办法吗?你知道吗
(使用wx.WS \u EX \u递归验证\u将传播到子级,但前提是之前没有其他控件无效)
编辑:
我没有为每个控件覆盖Validate(),而是决定使用一个单独的函数,它迭代所有子控件并验证它们。
注意:默认情况下OnOK
事件不会调用此函数。为此,事件处理程序必须是反弹的。你知道吗
def ValidateRecursively(control):
'''Validate this control and its children recursively'''
validator = control.GetValidator()
# no validator -> valid
isValid = validator.Validate(control) if validator else True
for childControl in control.GetChildren():
# only validate enabled controls
if childControl.IsEnabled():
isValid &= ValidateRecursively(childControl)
return isValid
要做到这一点,您需要重写对话框中的
Validate()
,自己遍历所有控件,而不必像基类实现那样在第一个无效控件处停止。你知道吗不幸的是,您可能需要复制code here,因为无法重用它。好的一面是,您可以像使用它一样使用它,只需更改
return false
行即可记住错误并在末尾返回它。你知道吗相关问题 更多 >
编程相关推荐