littleguga
@littleguga
Не стыдно не знать, а стыдно не интересоваться.

Как продолжить выполнение кода после отображения формы?

С разницей ShowDialog() и Show() разобрался.
Нужно вызвать окно именно методом Show(), но при этом нужно продолжить выполнение кода после события Shown.
deleteWaiting waitForm = new deleteWaiting();
this.Enabled = false;
waitForm.Owner = this;
waitForm.Show();
//здесь проверка показана ли форма?
Thread.Sleep(12350);
MessageBox.Show("test");

Пробовал создавать переменную isShown в форме deleteWaiting. И дальше ставить if/while с проверкой на эту переменную. Но к успеху это не привело.
Вызываемая форма носит характер графической заглушки и переносить нужный код в нее по событию Shown - не вариант, слишком много всего за собой придется тащить.

Заранее благодарен за ответ. Если я где не прав и т.д. - очень прошу меня поправить, так как только начинаю работать с c#.
  • Вопрос задан
  • 2994 просмотра
Решения вопроса 3
Как вариант можно воспользоваться самим событием Shown, только подписаться на него с первой формы:
private void button1_Click(object sender, EventArgs e)
        {
            var form = new Form1();
            form.Shown += form_Shown;
            form.Show();

        }

        void form_Shown(object sender, EventArgs e)
        {
            MessageBox.Show("Test");
        }
Ответ написан
Комментировать
@Oxoron
Шарпер
У второй формы есть событие OnClose().
У первой формы создаете открытое поле bool secondFormShowed.
У второй создаете поле readonly Form1 Creator, создаете конструктор
public Form2 (Form1 frm) 
{
Creator = frm;
// Тут еще инициализация компонентов, создается по умолчанию. Что-то вроде InitializeComponents()
}


Перегружаете событие OnClose() у формы Form2, там вписываете
Creator.secondFormShowed = true;

Получите код вроде
using(Form2 waitForm = new Form2(this))
{
this.secondFormShowed = false;
this.Enabled = false;
waitForm.Show();
while(!this.secondFormShowed)
{
Thread.Sleep(1000); // Пока переменная не установлена в true второй формой
}
MessageBox.Show("test");
this.Enabled = true;
}


Ориентироваться на Owner мне несколько стремно, мало ли где он потом изменится. Однако можно использовать и его вместо Creator.

Плюс, как более сложный с непривычки вариант, смотрите свой предыдущий вопрос и мой ответ, про механизм событий.
Ответ написан
@MonkAlex
C#, SQL, Delphi, C++ etc
Запускаешь в отдельном потоке выполнение нужного кода, а потом Show заглушки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы