Cod*_*ile 20 .net events winforms
考虑一个带有几个单选按钮和一个复选框的简单.NET表单.
每个单选按钮都有一个CheckedChanged处理程序设置,它根据复选框的状态执行某些操作.
我的问题是,当我初始化要检查的默认单选按钮时(从设计器属性窗口),为该单选按钮触发CheckedChanged事件,但Checkbox尚未初始化,所以我得到一个空指针异常或者处理程序中使用了错误的值.无论哪种方式,我都不希望运行处理程序代码,除非用户在加载表单后选择一个单选按钮.
我目前通过不初始化单选按钮来解决这个问题,但我最终需要设置默认值,最好的位置来自设计师.我也可以在表单完全加载之前添加一个未设置为true的布尔字段,如果这是假的,则不处理事件,但这是一个脏的黑客.
我该怎么做才能阻止该处理程序运行其代码?
Han*_*son 28
为了让它感觉稍微脏一点,如果你在表单的构造函数中初始化控件,你可以使用表单IsHandleCreated属性而不是你自己的bool来检查它是否应该实际验证.
我认为通常你不想在它第一次显示之前验证任何东西,并且在它出现之前不会创建句柄.
代码示例:
Private Sub myRadioButton_CheckedChanged(sender As Object, e As EventArgs) Handles myRadioButton.CheckedChanged
If myRadioButton.Checked AndAlso myRadioButton.IsHandleCreated Then
'Do Work
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
Fas*_*tAl 21
"我也可以在表单完全加载之前放置一个未设置为true的布尔字段,如果错误则不处理事件,但这是一个肮脏的黑客攻击."
它也是最简单和最好的方法!
让我们说.NET提供了一种简洁的方法来打开和关闭所有事件处理程序,直到表单加载.即使只是你正在处理的那些.它仍然不够灵活,无法禁用您想要启用的功能,但禁用您没有启用的功能.通常表单设置发生,您希望事件触发.如果没有事件发生,表单也不会正确构建.
| 归档时间: |
|
| 查看次数: |
35500 次 |
| 最近记录: |