2010-04-28 1 views
0

У меня есть код:Как сделать так, чтобы Form2 при нажатии кнопки Button1 не открывался во второй раз?

private void Button1_Click (object sender, EventArgs e) 
(
    Form2 f2 = new Form2(); 
    f2.Show(); 
) 

, как сделать так, чтобы Form2 при нажатии на Button1 не открыт во второй раз, если он открыт?

извините за плохой английский

ответ

2

Вы должны убедиться, что у вас есть только 1 экземпляр Form2. Один из способов сделать это, чтобы переместить декларацию объекта и создания экземпляра в частной переменной и в обработчике события щелчка просто вызовите Show() метод:

private Form2 f2 = new Form2(); 
private void Button1_Click (object sender, EventArgs e) 
(
    if(f2 == null) 
    { 
     f2 = new Form2(); 
    } 
    f2.Show(); 
) 
+0

, когда я закрываю Form2, а затем попытаться открыть, ошибку: доступ к объекту не может быть утилизирован – Saska

+0

@Saska - Вы можете проверить, если form2 является недействительным в щелчке события. Ответ обновлен. – Oded

1

Если предположить, что основной формой класс MyForm, обновить свой код, как показано ниже. Идея состоит в том, чтобы поддерживать только один экземпляр формы2.

public partial class MyForm: Form 
{ 
    public MyForm() 
    { 
     InitializeComponent(); 
    } 

    private Form2 f2; 
    private void Button1_Click (object sender, EventArgs e) 
    ( 
     if (null == f2 || f2.IsDisposed) 
      f2 = new Form2(); 

     f2.Show(); 
    ) 
} 
0

Я не проверил, если Visible свойство будет работать на форме, но вы можете попробовать это.

public partial class MyForm: Form 
    { 
     public MyForm() 
     { 
      InitializeComponent(); 
     } 

     Form2 f2 = null; 
     private void Button1_Click (object sender, EventArgs e) 
     ( 
      if(f2 == null) 
       f2 = new Form2(); 
      if(!f2.Visible) 
       f2.Show(); 
     ) 
    } 
+0

благодарю вас – Saska

2

Аналогично существующих ответы, но с дополнительным обработчиком события:

private Form f2 = null; 
private void Button1_Click (object sender, EventArgs e) 
{ 
    if (f2 == null) 
    { 
     f2 = new Form2(); 
     // Make sure we don't try to re-show a closed form 
     f2.FormClosed += delegate { f2 = null; }; 
    } 
    f2.Show(); 
} 
0

Этот код будет открыть форму. Если ранее форма не была отклонена в приложении.

private void button1_Click(object sender, EventArgs e) 
    { 
     bool result = false; 

     foreach (Form form in Application.OpenForms) 
     { 
      if (form.GetType() == typeof(Form2)) 
       result = true; 
     } 

     if (result == false) 
      new Form2().Show(); 
    } 
Смежные вопросы