#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#, все еще учусь методом проб и ошибок. Я буду осторожен с этим в будущем, спасибо за совет.