#vbnet #usercontrol
На форме есть кнопка, при нажатии на которую отображается usercontrol. Если в метод click кнопки поместить процедуру, то она будет выполняться, затем выход из метода click и только тогда появляется usercontrol. А как сделать чтобы сначала показался usercontrol, а затем начал выполняться код процедуры?
Ответы
Ответ 1
Код нужно поместить в следующую процедуру в самой форме: Private Sub UserForm_Activate() MsgBox "Run after activation (show) of form " End Sub Если вы не хотите чтобы процедура была внутри класса контроля, то создайте процедуру общего доступа (Public) в любом модуле и тоже вызывайте ее из процедуры активации UserForm_Acivate. .. В модуле: Public Sub DoSomethingAfterControlShow() MsgBox "Ok After show" End Sub .. В UserForm: Private Sub UserForm_Activate() DoSomethingAfterControlShow End SubОтвет 2
Если я правильно понимаю суть вопроса, то код Private Sub btnShow_Click(sender As Object, e As EventArgs) Handles btnShow.Click MsgBox("Hi") btnUnvisible.Visible = True End Sub выполняется синхронно и контрол btnUnvisible появляется только после нажатия на кнопку "Ок" диалогового окна. Для того, чтобы любой код (в моем случае это msgbox, но может быть вызов любой другой процедуры) выполнялся асинхронно, нужно переписать обработчик события следующим образом: Private Async Sub btnShow_Click(sender As Object, e As EventArgs) Handles btnShow.Click Dim t = New Task(Sub() MsgBox("Hi") ' здесь может быть вызов процедуры или любой другой код End Sub) t.Start() btnUnvisible.Visible = True Await t End Sub В данном случае код внутри Task будет выполнен асинхронно (в другом потоке или в этом же, в зависимости от более оптимального расклада с точки зрения пула потоков), весь код между объявлением объекта Task и ожиданием завершения асинхронной процедуры Await t будет выполнен "параллельно" - таким образом, при нажатии на кнопку будет одновременно отображен другой контрол и показано диалоговое окно
Комментариев нет:
Отправить комментарий