当前位置 : 主页 > 编程语言 > c语言 >

.net – 有一个属性来确定是否加载了Form(和它的控件)?

来源:互联网 收集:自由互联 发布时间:2021-06-24
我想澄清一下,我已经知道如何通过设置一个布尔变量标志(例如:dim FormIsLoaded为boolean)来检查是否加载了一个表单,并在表单的Load事件之后将其设置为True,以限制其使用[Enum].导致我的co
我想澄清一下,我已经知道如何通过设置一个布尔变量标志(例如: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, String value, 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, e As EventArgs) Handles _
        KryptonRadioButton_CommandRedirection_Standard.CheckedChanged,
        KryptonRadioButton_CommandRedirection_Error.CheckedChanged,
        KryptonRadioButton_CommandRedirection_All.CheckedChanged,
        KryptonRadioButton_CommandRedirection_None.CheckedChanged

    If Me.IsAccessible Then

        If CBool(sender.checked) Then
            CommandRedirection = [Enum].Parse(GetType(Reg2Bat.CommandRedirection),
                                              CStr(sender.tag), True)
        End If

    End If

    MsgBox(CommandRedirection.ToString)

End Sub

那么,使用Me.IsAccessible属性,它是检查表单/控件是否加载的正确解决方案?如果没有,有一个属性可以检查这个?

我相信你正在寻找的是Form.IsHandleCreated确认是建立的(并且已经通过.Designer文件中的InitialiseComponent()例程.)

之后,值得检查Form.IsDisposed以确保它从未被销毁过.

这在多线程应用程序中更加困难,因为除非您可以对表单的拥有线程执行检查,否则在执行测试后可能会发生状态更改.

网友评论