gpt4 book ai didi

c# - 不挂其他控件的WinForms验证

转载 作者:行者123 更新时间:2023-11-30 14:59:50 24 4
gpt4 key购买 nike

所以,我在 WinForms 中遇到了这个问题,至少我认为这是一个问题,但我不知道如何解决它。

基本上,当我为控件实现 Validating 事件处理程序时,我会在控件验证失败时将 CancelEventArgs.Cancel 设置为 true。示例代码:

private void NameTextBox_Validating(object sender, CancelEventArgs e) {
// Assume Cool Validation Logic.
//
// ...
var isValid = false;
if (!isValid) {
e.Cancel = true;

// Set an Error Provider Message.
//
// ...
}
}

这会导致整个 UI 挂起。我无法选择任何其他控件、最小化父窗体窗口或事件退出父窗体窗口。所以我发现了一个类似的问题,其答案建议为父表单实现一个 FormClosing 事件处理程序,并将 FormClosingEventArgs.Cancel 设置为 false。

问题是,只要我的控件无效,就永远不会调用事件处理程序。我有一种感觉,它可能与我的控制层次结构有关,尽管我不是 100% 确定。如果这对您有帮助,那就是:

-- Parent Form

---- Custom User Control

------ Text Box Control (<-- Causes Hang)

如有任何想法,我们将不胜感激。

最佳答案

我找到了一个非常简单的解决方案,我真的很生气,因为我浪费了我生命中的很多时间来敲击键盘。

只需将父容器的 ContainerControl.AutoValidate 属性设置为 EnableAllowFocusChange 即可解决问题。此上下文中的“父容器”是指实际容纳输入控件的容器。

如果您有控件层次结构,您还可以将 ContainerControl.AutoValidate 属性设置为 Inherit 并将最外层容器设置为 EnableAllowFocusChange .

希望这对以后的人有帮助。

关于c# - 不挂其他控件的WinForms验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16178436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com