Страницы

Поиск по вопросам

суббота, 7 марта 2020 г.

Как определить, из какой формы была открыта текущая?

#c_sharp #winforms


Из одной формы запускается другая при помощи подобного кода (по сути, стандартного):

private void Show_Click(object sender, EventArgs e)
    {
        Child form1 = new Child();
        form1.ShowDialog();
    }


Как узнать тип той формы, которая запустила Child? На основе этого должно определяться
содержимое формы Child.
    


Ответы

Ответ 1



Ну раз @VladD считает не зазорным ответ с "отлупом" :) Старайтесь придерживаться одно-направленного потока информации: форма/класс, которая создает Child знает про Child, а Child не знает про форму/класс, которая его создает. (Что будет, если Child создается в методе класса, который не является формой? Подумаем.) Подавайте в конструктор класса Child, или устанавливайте как его свойство, индикатор поведения Child.

Ответ 2



Никак. В C# нету легального метода узнать, кто вызвал данный код. Даже если бы это было можно, это плохая практика: это не поддаётся ни рефакторингу, ни тестированию. Пусть код, показывающий форму, сам конфигурируете её, передавая ей нужную информацию. В худшем случае это может быть просто this, в лучшем — специализированная структура данных, описывающая то, что нужно показать. Ещё более хорошим вариантом является вынесение бизнес-логики (при каких обстоятельствах нужно открыть новое окно, и что за информацию в нём показывать) из UI-кода (кода исходной формы), но это скорее всего потребует большой переработки проекта.

Комментариев нет:

Отправить комментарий