Я пытаюсь вызвать событие в своей основной форме, когда дочерняя форма дочерней формы закрывается

#c#

Вопрос:

С помощью кнопки в моей основной форме я открываю форму поиска. Когда я нажимаю на кнопку в своей форме поиска, открывается новая форма, в которой отображаются результаты поиска.

Когда я нажимаю кнопку в своей форме «результаты поиска», я хочу, чтобы она запускала событие в моей основной форме.

Я попробовал приведенный ниже код, но он не сработал, в основном он ничего не сделал.

Основная Форма:

 public void mainBtnMenuSearch_Click(object sender, EventArgs e)
        {
            frmSearch frmSearch = new frmSearch();                    // My search form
            frmSearchList frmSearchList = new frmSearchList();        // My search results form
            frmSearchList.FormClosed  = frmSearchTriggerEvent;        // Search results form closed

            frmSearch.Show();
        }


public void frmSearchTriggerEvent(object sender, FormClosedEventArgs e)
        {
            if (frmSearchList.isOpenedProject == true)
            {
                loadForm();               // Load another form into the panel in my Main form
            }
            else if (frmSearchList.isOpenedProject == false)
            {
                // ¯_(ツ)_/¯
            }
        }


 

Форма поиска:

 public void searchByDate_Click(object sender, EventArgs e)
        {
            // some code for passing search results

            frmSearchList frmSearchList = new frmSearchList();        // My search results form
            frmSearchList.Show();

            this.Close();
        }
 

Форма Результатов поиска:

 public void openProjectByResult_Click(object sender, EventArgs e)
        {
            // some code for passing selected result's details

            this.Close();
        }
 

Редактировать
Я проверил точки останова. frmSearchTriggerEvent не срабатывает и frmSearchList.isOpenedProject становится истинным до срабатывания.

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

1. Так ты хочешь сказать frmSearchTriggerEvent , что это никогда не срабатывает? вы поставили там точку останова , чтобы убедиться в этом ?

2. Возможно, frmSearchList.isOpenedProject является ложным, что приведет к отсутствию наблюдаемого поведения. Вы проверили с помощью точки останова, которая frmSearchTriggerEvent не вызывается?

3. @The General; да, я поставил точку останова. frmSearchTriggerEvent не срабатывает. @Кто-то; Я также проверил frmSearchList.isOpenedProject , становится правдой, я проверил с помощью точки останова.

4. Проблема решена, и я, вероятно, нашел ее причину. Проверьте ответ.

5. Но … опубликованный код, похоже, не реализует это требование. Вы сказали: «форма A открывает форму B, форма B открывает форму C, и я хочу, чтобы форма A что — то делала, когда форма C закрывается» — опубликованный код прикрепляет обработчик событий к закрытию формы B ?

Ответ №1:

Кажется, я понял, в чем проблема.

Как в Основной, так и в поисковой формах я объявил frmSearchList как новую форму, что означает, что она дважды объявляется как новая форма.

Я frmSearchList однажды объявил форму в глобальном классе (который я также использую для переменных, работающих с SQL-запросами), связал событие FormClosed и форму.Покажите() команду для этого. Теперь это работает.

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

1. глобальный класс — звучит ужасно! 😀

2. он дважды объявляется как новая форма — если бы вы назвали свои локальные переменные likeThis и переменные уровня класса _likeThis , такой ситуации, вероятно, не произошло бы

3. @CaiusJard На самом деле я новичок в C#, все еще учусь методом проб и ошибок. Я буду осторожен с этим в будущем, спасибо за совет.