Como calcular a quantidade de formulários abertos em C#

Em aplicações Windows Forms, pode ser necessário acompanhar quantos formulários estão abertos ao mesmo tempo. Isso pode ser útil para gerenciar recursos ou limitar o número de instâncias de um formulário específico. Neste post, vamos explorar como calcular a quantidade de formulários abertos em C#.

Exemplo de código

using System;
using System.Linq;
using System.Windows.Forms;

namespace ContarFormularios
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnAbrirFormSecundario_Click(object sender, EventArgs e)
        {
            FormSecundario formSecundario = new FormSecundario();
            formSecundario.FormClosed += FormSecundario_FormClosed; // Assina o evento de fechamento
            formSecundario.Show();
            AtualizarQuantidadeFormularios();
        }

        private void FormSecundario_FormClosed(object sender, FormClosedEventArgs e)
        {
            AtualizarQuantidadeFormularios(); // Atualiza a quantidade quando o formulário secundário é fechado
        }

        private void AtualizarQuantidadeFormularios()
        {
            // Conta o número de formulários abertos
            int quantidade = Application.OpenForms.Cast<Form>().Count();
            lblQuantidadeFormularios.Text = $"Quantidade de Formulários Abertos: {quantidade}";
        }
    }
}

Explicação do código

  • btnAbrirFormSecundario_Click: Este método é chamado quando o botão para abrir o formulário secundário é clicado. Um novo objeto FormSecundario é criado e exibido.

  • FormSecundario_FormClosed: Este evento é acionado quando o FormSecundario é fechado. Ele chama o método AtualizarQuantidadeFormularios para atualizar a contagem.

  • AtualizarQuantidadeFormularios: Este método usa Application.OpenForms para contar o número de formulários abertos. O resultado é exibido em um Label.

Outro exemplo prático

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace ContarFormulariosAbertos
{
    public partial class MainForm : Form
    {
        private List<Form> openForms = new List<Form>(); // Lista para armazenar formulários abertos

        public MainForm()
        {
            InitializeComponent();
        }

        private void buttonOpenForm_Click(object sender, EventArgs e)
        {
            OpenNewForm();
        }

        private void OpenNewForm()
        {
            // Cria uma nova instância do formulário secundário
            Form newForm = new Form();
            newForm.Text = "Formulário " + (openForms.Count + 1);
            newForm.FormClosed += NewForm_FormClosed; // Associa o evento de fechamento

            // Exibe o formulário
            newForm.Show();
            openForms.Add(newForm); // Adiciona à lista de formulários abertos

            UpdateOpenFormsCount(); // Atualiza a contagem
        }

        private void NewForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            // Remove o formulário fechado da lista
            openForms.Remove(sender as Form);
            UpdateOpenFormsCount(); // Atualiza a contagem
        }

        private void UpdateOpenFormsCount()
        {
            labelOpenFormsCount.Text = $"Formulários Abertos: {openForms.Count}"; // Atualiza o label
        }
    }
}

Explicação do código

  • openForms: Uma lista que armazena as instâncias dos formulários abertos;

  • buttonOpenForm_Click: Este método é chamado quando o botão para abrir um novo formulário é clicado. Ele chama o método OpenNewForm();

  • OpenNewForm: Este método cria uma nova instância de um formulário, define seu título e associa o evento FormClosed ao método NewForm_FormClosed, que é chamado quando o formulário é fechado. Em seguida, ele exibe o novo formulário e o adiciona à lista openForms;

  • NewForm_FormClosed: Este método é chamado quando um formulário é fechado. Ele remove o formulário da lista openForms e atualiza a contagem de formulários abertos;

  • UpdateOpenFormsCount: Este método atualiza o Label para exibir a quantidade atual de formulários abertos.

Para identificar a quantidade de formulários abertos na sua aplicação de forma a tomar determinadas decisões, basta utilizar OpenForms, conforme o código a seguir:

int qtdeFormsAbertos =  Application.OpenForms.OfType<MeuFormulario>().Count();

Calcular a quantidade de formulários abertos em uma aplicação C# é uma tarefa simples utilizando a propriedade Application.OpenForms.

Com essa abordagem, você pode gerenciar melhor os recursos da sua aplicação e fornecer uma interface mais interativa para o usuário. Experimente expandir essa funcionalidade para adicionar controles adicionais ou interações com os formulários abertos!

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
 https://youtube.com/criandobits

Tags:

Sobre o Autor

Benedito Silva Júnior
Benedito Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *