我想澄清一下,我已经知道如何通过设置一个布尔变量标志(例如:dim FormIsLoaded为boolean)来检查是否加载了一个表单,并在表单的Load事件之后将其设置为True,以限制其使用[Enum].导致我的coden异常的方法.
但这不是我要求的,这不是一个典型的问题,请继续阅读……
我有一个这样的事件处理程序:
''' <summary> ''' Indicates the resulting Batch command redirection. ''' </summary> Private CommandRedirection As Reg2Bat.CommandRedirection = Reg2Bat.CommandRedirection.Standard Private Sub KryptonRadioButton_CommandRedirections_CheckedChanged(sender As Object,e As EventArgs) Handles _ KryptonRadioButton_CommandRedirection_Standard.CheckedChanged,KryptonRadioButton_CommandRedirection_Error.CheckedChanged,KryptonRadioButton_CommandRedirection_All.CheckedChanged,KryptonRadioButton_CommandRedirection_None.CheckedChanged If CBool(sender.checked) Then CommandRedirection = [Enum].Parse(GetType(CMD.CommandRedirection),CStr(sender.tag),True) End If End Sub
但是If给了我一个类型的错误.在Program.exe中发生类型为’System.InvalidOperationException’的未处理异常,我确定发生错误是因为在事件处理程序尝试访问值之前表单没有完全加载控制.
堆栈跟踪:
en System.Enum.TryParseEnum(Type enumType,String value,Boolean ignoreCase,EnumResult& parseResult) en System.Enum.Parse(Type enumType,Boolean ignoreCase) en Reg2Bat.GUI.KryptonRadioButton_CommandRedirection_Standard_CheckedChanged(Object sender,EventArgs e) en C:\Users\Administrador\Desktop\Reg2Bat\Reg2Bat\UserInterfaces\GUI\GUI.vb:línea 271 en ComponentFactory.Krypton.Toolkit.KryptonRadioButton.set_Checked(Booleanvalue) en Reg2Bat.GUI.InitializeComponent() en C:\Users\Administrador\Desktop\Reg2Bat\Reg2Bat\UserInterfaces\GUI\GUI.Designer.vb:línea 104 en Reg2Bat.GUI..ctor() en C:\Users\Administrador\Desktop\Reg2Bat\Reg2Bat\User Interfaces\GUI\GUI.vb:línea 49
我想改进’FormIsLoaded?’在没有写入不必要的变量(布尔标志)的情况下进行检查以保持我的代码更加漂亮和简化,因此,正如我的问题的标题所说,我要求的是,如果存在属性,或者只是一个In-One-Line检查表单是否在任何时刻完全加载的解决方案.
我也要求它知道更多改进的替代方法,而不是设置一个布尔值来检查表单是否已加载.
到目前为止我正在尝试该属性(Me.IsAccessible),并且似乎正在正确工作’因为现在[Enum] .Parse方法不会抛出任何异常,但我不确定该属性是否真正检查(我已经阅读了道具的intellisense帮助,但没有).
Private Sub KryptonRadioButton_CommandRedirections_CheckedChanged(sender As Object,KryptonRadioButton_CommandRedirection_None.CheckedChanged If Me.IsAccessible Then If CBool(sender.checked) Then CommandRedirection = [Enum].Parse(GetType(Reg2Bat.CommandRedirection),True) End If End If MsgBox(CommandRedirection.ToString) End Sub
那么,使用Me.IsAccessible属性,它是检查表单/控件是否加载的正确解决方案?如果没有,有一个属性可以检查这个?
解决方法
我相信你正在寻找的是Form.IsHandleCreated确认是建立的(并且已经通过.Designer文件中的InitialiseComponent()例程.)
之后,值得检查Form.IsDisposed以确保它从未被销毁过.
这在多线程应用程序中更加困难,因为除非您可以对表单的拥有线程执行检查,否则在执行测试后可能会发生状态更改.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。