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

305
19 мая 2017, 12:52

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

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

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

Answer 1

Ну раз @VladD считает не зазорным ответ с "отлупом" :)

Старайтесь придерживаться одно-направленного потока информации: форма/класс, которая создает Child знает про Child, а Child не знает про форму/класс, которая его создает.

(Что будет, если Child создается в методе класса, который не является формой? Подумаем.)

Подавайте в конструктор класса Child, или устанавливайте как его свойство, индикатор поведения Child.

Answer 2

Никак.

В C# нету легального метода узнать, кто вызвал данный код. Даже если бы это было можно, это плохая практика: это не поддаётся ни рефакторингу, ни тестированию.

Пусть код, показывающий форму, сам конфигурируете её, передавая ей нужную информацию. В худшем случае это может быть просто this, в лучшем — специализированная структура данных, описывающая то, что нужно показать.

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

READ ALSO
Как объединить две кнопки используя if

Как объединить две кнопки используя if

Есть button Play и button PauseХочу объединить их в одну кнопку, чтобы когда композиция уже играет при нажатии ставилась пауза, а если стоит пауза то при...

240
Отсчет времени в WPF

Отсчет времени в WPF

Имею класс, в классе есть две переменные long (UnixTime), они привязаны через Binding к ProgressBarТакже отдельно имеется класс, который переводит текущее...

397
Неявный принцип работы AutoResetEvent

Неявный принцип работы AutoResetEvent

Столкнулся с непонятным поведением механизма AutoResetEvent

269