Я хотел бы уточнить, что я уже знаю, как проверить, загружена ли форма, установив флаг логической переменной (пример: 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?" проверка без написания ненужных переменных (булевых флагов), чтобы мой код был более красивым и упрощенным, поэтому, как следует из названия моего вопроса, я прошу, если существует свойство или просто 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
является правильным решением для проверки загрузки формы/элементов управления? Если нет, то есть свойство, которое могло бы это проверить?