Neste post vamos usar de forma simples a classe Dictionary do .net Framework, imaginando um o seguinte cenário aonde nosso form principal trabalha com Mdi.
Temos um formulário principal, e no mesmo ele tem um menuStrip responsável a carregar os menus da nossa aplicação, para cada item de menu devemos ficar fazendo instancia para cada form que existir na nossa aplicação.
Exemplo
FCadastroCliente CadastroCliente = new FCadastroCliente(); CadastroCliente.MdiParent = this; CadastroCliente.ShowDialog(); CadastroCliente.Dispose();
Isso com certeza tem que ser feito para nossa aplicação chamar as determinadas telas do nosso projeto. Com o Dictionary vamos implementar um procedimento aonde o mesmo vai se responsabilizar por fazer isso de modo simples e bastante produtivo, para que nos menus passamos chamar só o nosso metodo que acabamos de desenvolver para carregar telas.
using System.Collections.Generic; private Dictionary<Type, Form> dicForms = new Dictionary<Type, Form>(); private void CarregaTela<T>() { CarregarTela(typeof(T)); } private void CarregarTela(Type type) { bool carregar = true; Form f = null; try { if (dicForms.ContainsKey(type)) { if (dicForms.TryGetValue(type, out f)) { if (!f.IsDisposed) { f.Focus(); carregar = false; } else { dicForms.Remove(type); } } } if (carregar) { Cursor = Cursors.WaitCursor; f = (Form)Activator.CreateInstance(type); dicForms.Add(type, f); f.MdiParent = this; f.FormBorderStyle = FormBorderStyle.FixedSingle; f.StartPosition = FormStartPosition.CenterScreen; f.MaximizeBox = false; f.Show(); } } catch (Exception ex) { dicForms.Remove(type); MessageBox.Show("Não foi possível inicializar a tela " + type.Name + "!" + "\n\nCausa:" + ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error); if (f != null) { f.Close(); f.Dispose(); } } finally { Cursor = Cursors.Default; } }
Agora basta passar em cada item de menu chamar a tela assim
CarregaTela<FCadastroCliente>();
E nosso método que acabamos de implementar ira criar a instância do nosso objeto tela para o sistema.