我正在验证用户输入控件,例如文本框和下拉列表。我遇到的问题是,验证(containers.Validate())在找到第一个无效控件后停止。我希望它在返回之前验证所有控件。我想一次显示用户所有无效控件,而不是逐个显示。有办法吗?
(使用wx.WS_EX_VALIDATE_RECURSIVELY将传播给子节点,但前提是没有其他控件无效)
修改
我没有为每个控件覆盖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
答案 0 :(得分:0)
要执行此操作,您需要在对话框中覆盖Validate()
并自行迭代所有控件而不停止第一个无效控件,就像基类实现一样。
不幸的是,您可能需要复制code here,因为无法重复使用它。从好的方面来说,您可以使用它,只需更改return false
行即可记住错误,并在最后返回。