加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 07:20:45 所属栏目:百科 来源:网络整理
导读:我想澄清一下,我已经知道如何通过设置一个布尔变量标志(例如:dim FormIsLoaded为boolean)来检查是否加载了一个表单,并在表单的Load事件之后将其设置为True,以限制其使用[Enum].导致我的coden异常的方法. 但这不是我要求的,这不是一个典型的问题,请继续阅读
我想澄清一下,我已经知道如何通过设置一个布尔变量标志(例如: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:UsersAdministradorDesktopReg2BatReg2BatUserInterfacesGUIGUI.vb:línea 271  
en ComponentFactory.Krypton.Toolkit.KryptonRadioButton.set_Checked(Booleanvalue) 
en Reg2Bat.GUI.InitializeComponent() 
en C:UsersAdministradorDesktopReg2BatReg2BatUserInterfacesGUIGUI.Designer.vb:línea 104    
en Reg2Bat.GUI..ctor() 
en C:UsersAdministradorDesktopReg2BatReg2BatUser InterfacesGUIGUI.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以确保它从未被销毁过.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读