2012-03-10 2 views
2

Мне интересно, как я могу снова открыть закрытую форму из этого.Close(). Каждый раз, когда я пытаюсь открыть закрытую форму с помощью Mainmenu.Show(), исключение вызывает ошибку «не может получить доступ к удаленному объекту. Имя объекта: Mainmenu».Открыть закрытую форму

Как я могу открыть его снова?

ответ

3

Когда метод Close вызывается на Form вы не можете вызвать метод Show сделать форму видимой, так как ресурсы форме в уже выпущен ака Disposed. Чтобы скрыть форму и затем сделать ее видимой, используйте метод Control.Hide.

from MSDN

Если вы хотите повторно открыть форму, которая была закрыта, вам необходимо заново создать его снова так же, как вы создали, это в первый:

YourFormType Mainmenu=new YourFormType(); 
Mainmenu.Show(); 
+0

мое намерение состоит в закрыть форму и снова открыть ее. так как я могу открыть закрытую форму? – Sephiroth111

+0

, если вы хотите повторно открыть форму, которая была закрыта, вам необходимо повторно создать ее так же, как вы создали, сначала: 'YourFormType Mainmenu = new YourFormType(); Mainmenu.Show() ' –

0

Вы не можете Показать закрытую форму. Вы можете позвонить this.Hide(), чтобы закрыть форму. Позже вы можете позвонить form.Show();

Либо это, либо вам нужно создать форму заново.

2

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

  1. форма Ребенок еще не была создана еще, или она была закрыта. В этом случае создайте форму и покажите ее.
  2. детская форма уже работает. В этом случае вам нужно только показать его (оно может быть сведено к минимуму, и вы захотите его восстановить).

В принципе, ваша главная форма должна отслеживать жизни дочернего формы в, путем обработки его FormClosed событие:

class MainForm : Form 
{ 
    private ChildForm _childForm; 

    private void CreateOrShow() 
    { 
     // if the form is not closed, show it 
     if (_childForm == null) 
     { 
      _childForm = new ChildForm(); 

      // attach the handler 
      _childForm.FormClosed += ChildFormClosed; 
     } 

     // show it 
     _childForm.Show(); 
    } 

    // when the form closes, detach the handler and clear the field 
    void ChildFormClosed(object sender, FormClosedEventArgs args) 
    { 
     // detach the handler 
     _childForm.FormClosed -= ChildFormClosed; 

     // let GC collect it (and this way we can tell if it's closed) 
     _childForm = null; 
    } 
} 
+0

@downvoter: помогите объяснить, как этот ответ« не полезен »? – Groo

0

Небольшое дополнение к смарт представленный код, приведенный выше

private void CreateOrShow() 
{ 
    // if the form is not closed, show it 
    if (_childForm == null || _childFom.IsDisposed) 
    { 
     _childForm = new ChildForm(); 

     // attach the handler 
     _childForm.FormClosed += ChildFormClosed; 
    } 

    // show it 
    _childForm.Show(); 
} 

// when the form closes, detach the handler and clear the field 
void ChildFormClosed(object sender, FormClosedEventArgs args) 
{ 
    // detach the handler 
    _childForm.FormClosed -= ChildFormClosed; 

    // let GC collect it (and this way we can tell if it's closed) 
    _childForm = null; 
} 
+0

Спасибо за подчинение, Аззам. Пожалуйста, не следует, что обычно лучше редактировать существующие ответы, а не добавлять новые для небольших обновлений. –

+0

Brett Wolfington Спасибо, что сообщили мне, Best Regard –

Смежные вопросы