gpt4 book ai didi

.net - 是否有一个属性来确定是否加载了表单(及其控件)?

转载 作者:行者123 更新时间:2023-12-03 17:49:15 25 4
gpt4 key购买 nike

我想澄清一下,我已经知道如何通过设置 bool 变量标志(例如: dim FormIsLoaded as boolean )并将其设置为 True 来检查表单是否已加载。后 Load表单事件,限制[Enum].Parse的使用在我的代码中导致异常的方法。

但这不是我要问的,这不是一个典型的问题,请继续阅读...

我有一个这样的事件处理程序:

''' <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给我一个 An unhandled exception of type 'System.InvalidOperationException' occurred in Program.exe 类型的错误并且我确定发生错误是因为在事件处理程序尝试访问控件的值之前表单未完全加载。

堆栈跟踪:
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?”在不编写不必要的变量( bool 标志)的情况下进行检查以保持我的代码更加漂亮和简化,因此,正如我的问题标题所说,我要求的是如果存在一个属性,或者只是一个 In-One-Line检查表单是否在任何时候完全加载的解决方案。

我还要求它了解更多改进的替代方案,而不是设置 bool 值来检查表单是否已加载。

目前我正在尝试该属性( Me.IsAccessible ),并且似乎工作正常,因为现在 [Enum].Parse方法不会引发任何异常,但我不确定该属性真正在检查什么(我已经阅读了该 Prop 的 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以确保它没有被摧毁。

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

关于.net - 是否有一个属性来确定是否加载了表单(及其控件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22224210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com