2012-06-15 2 views
1

Как проверить, закрыта ли форма?Сделайте что-нибудь, когда форма закрыта

Я хочу перезагрузить элементы списка, когда закрываю другую форму.
Что я делаю:

Form1 = форма с ListView
Form2 = форма с TextBoxes

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

Как я должен это делать?

И извините за мой плохой английский :(.

+0

Значит, вы не хотите что-то делать, когда вторая форма закрыта ... вы хотите что-то сделать в форме1, когда нажата кнопка «Добавить» на форме2? –

+0

@GrantWinney Да, я хочу перезагрузить listview в Form1 –

ответ

1

Самый простой ответ - сделать публичный метод в Form1, назовем его RefreshList() и в событии click на Form2 вы просто вызываете Form1.RefreshList. Вот краткий пример:

Форма 2:

public Form1 ParentForm { get; set; } 

private void Button_Click(object Sender, EventArgs args) { 
{ 
    // After the rest of your handler 
    if(ParentForm != null) 
     ParentForm.RefreshList(); 

    Close(); // Close Form2 here, we're done! 
} 

Форма 1:

private void ShowForm2() 
{ 
    Form2 form2 = new Form2(); 
    form2.ParentForm = this; 
    form2.Show(); 
} 

public void RefreshList() 
{ 
    // do your refresh here 
} 

Сначала вы говорите, что вы хотите сделать это, когда Form2 закрывается, но потом вы говорите, что вы хотите для этого »Когда я нажимаю« Добавить »в Form2, я хочу перезагрузить« ListView »в Form1». Как уже упоминалось, вы можете использовать событие Closed, поэтому я применил этот подход для решения вашего второго дела.

+0

Ничего себе, ваш пример выглядит красиво! Да, я знаю, мой вопрос немного choopy :(, но я имел в виду, что когда я нажимаю кнопку «Добавить», кнопка выполняет некоторый код, а затем закрывает форму. –

+0

@Darkshadw Немного изменил пример, чтобы закрыть форма для ya. =) – CodingGorilla

+0

Это будет работать, но это не очень хорошо инкапсулировано. Например, если вы хотите повторно использовать Form2 из другой родительской формы, он не будет работать без дополнительной модификации, поскольку предполагает, что его родительская форма всегда Form1. –

1

Вы можете обрабатывать событие формы Closing как закрытое мероприятие является устаревшим, если вы используете что-либо выше точки сети 1,1

+1

Закрытое событие устарело и не должно использоваться, если вы еще не используете .NET 1.0. На самом деле это говорит о том, что вы указали в гиперссылке. – itsme86

+0

ах да Хороший звонок! –

0

Я не могу комментировать, так что я отправляю мой вопрос здесь.

Что вы имеете в виду форма закрыта? не могли бы вы опубликовать свой код?

Если вам нужно обновить содержимое другого div, я предлагаю использовать вызванный вызов ajax, но событие в другой форме.

+2

Он упомянул winform, но вы ссылались на ajax. LOL –

+0

Я не думаю, что он использует asp.net, поскольку его сообщения вращаются вокруг winforms. –

+0

В каждом из ответов есть ссылка на документацию, в которой есть образцы кода. – David

0

Вы можете обработать событие FormClosed, если вы просто хотите реагировать на закрытие конкретной формы. Если вы хотите сделать это еще дальше, есть событие FormClosing, которое вы также можете обработать и даже предотвратить закрытие формы, если это необходимо.

0

Имея Form1, добавьте обработчик события в форму Form2 FormClosing. Это отличный вариант. Однако существует еще более простое решение, если Form2 является диалоговым окном. Другими словами, если нормально, что Form1 будет эффективно заблокирован и отключен, пока отображается Form2, вы можете просто показать Form2 как диалоговое окно. Окна диалога отображаются синхронно, поэтому вы можете просто обновить список сразу после показа Form2, и он не ударит по этому обновлению кода до тех пор, пока форма Form2 не будет закрыта.Например:

form2.ShowDialog(this); 
updateList(); 
Смежные вопросы