как сделать так, чтобы Form2 при нажатии на Button1 не открывалась во второй раз? - PullRequest
0 голосов
/ 28 апреля 2010

У меня есть код:

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

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

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

Ответы [ 5 ]

2 голосов
/ 28 апреля 2010

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

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 ();
}
2 голосов
/ 28 апреля 2010

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

private Form2 f2 = new Form2();
private void Button1_Click (object sender, EventArgs e)
(
    if(f2 == null) 
    {
      f2 = new Form2();
    }
    f2.Show ();
)
1 голос
/ 28 апреля 2010

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

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 голосов
/ 28 апреля 2010

Этот код откроет форму. Если ранее форма не опротестована в заявке.

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();
    }
0 голосов
/ 28 апреля 2010

Я не проверял, будет ли свойство 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 ();
        )
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...