Дочерняя форма должна открываться только один раз - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Помогите, пожалуйста разобраться. Есть главная форма Form1, на ней есть кнопка "Открыть вторую форму". В проект добавлена еще одна форма Form2. В обработчике событий кнопки главной формы пишу:
private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.MdiParent = this;
            f2.Show();
        }
Т.е. f2 является дочерчей формой Form1. При нажатии на кнопку отображается сколько угодно f2. Как ограничить появление дочерней формы только одним экземпляром? Заранее благодарен!

Решение задачи: «Дочерняя форма должна открываться только один раз»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace daniweb.mdi
{
  public partial class frmMain : Form
  {
    public frmMain()
    {
      InitializeComponent();
    }
 
    private Form OpenForm(Type t)
    {
      if (!t.IsSubclassOf(typeof(Form)) && !(t == typeof(Form)))
        throw new ArgumentException("Type is not a form", "t");
 
      List<Form> lst = new List<Form>();
 
      try
      {
        for (int i1 = 0; i1 < Application.OpenForms.Count; i1++)
        {
          Form f = Application.OpenForms[i1];
          if (f.IsMdiChild)
            lst.Add(f);
        }
      }
      catch (IndexOutOfRangeException)
      {
        //This can change if they close/open a form while code is running. Just throw it away
      }
 
      while (lst.Count > 0)
      {
        Form f = lst[0];
        f.Close();
        f.Dispose();
        lst.RemoveAt(0);
      }
 
      Form result = (Form)Activator.CreateInstance(t);
      result.MdiParent = this;
      result.Show();
      return result;
    }
 
    private void openForm1ToolStripMenuItem_Click(object sender, EventArgs e)
    {
      frmMdi1 frm = (frmMdi1)OpenForm(typeof(frmMdi1));
      frm.Text = "abc";
    }
 
    private void openForm2ToolStripMenuItem_Click(object sender, EventArgs e)
    {
      frmMdi2 frm = (frmMdi2)OpenForm(typeof(frmMdi2));
      frm.Text = "123";
    }
  }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы