9ee*_*ee1 3 .net c# winforms .net-4.5
所以,我在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.
//
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致整个UI挂起.我无法选择任何其他控件,最小化父窗体窗口,或事件退出父窗体窗口.所以我找到了一个类似的问题,其答案建议FormClosing为父表单实现一个事件处理程序,并FormClosingEventArgs.Cancel在那里设置为false.
问题是,只要我的控件无效,就不会调用该事件处理程序.我觉得它可能与我的控制层次结构有关,尽管我不是100%肯定.如果这有助于它:
-- Parent Form
---- Custom User Control
------ Text Box Control (<-- Causes Hang)
Run Code Online (Sandbox Code Playgroud)
任何想法将不胜感激.
我找到了一个如此简单的解决方案,实际上我感到很沮丧,因此我浪费了很多时间来撞击键盘.
只需将父容器的ContainerControl.AutoValidate属性设置为EnableAllowFocusChange并解决问题.此上下文中的"父容器"表示实际容纳输入控件的容器.
如果您有控件层次结构,则还可以将ContainerControl.AutoValidate属性设置为,Inherit并将最外面的容器设置为EnableAllowFocusChange.
希望这可以帮助将来的某个人.
| 归档时间: |
|
| 查看次数: |
1200 次 |
| 最近记录: |