Primeiramente, vamos criar nosso projeto de teste
  1. No Visual Studio, va no menu File -> New -> Project;
  2. Na janela "New Project", escolha o tipo do projeto 'Visual C#";
  3. Em Template escolha "Windows Forms Application";
  4. No campo "Name" coloque o nome do projeto, vamos colocar TesteMDI;
  5. Em "Location" escolha um local de sua preferencia para salvar o projeto
  6. De um OK.

Pronto, nosso formulario principal ja esta criado. Vamos mudar as propriedades necessarias para que ele seja nosso formulario principal, o formulario Pai de nossa aplicação.

Para isso clique uma vez no form, e na janela "Properties" mude as seguintes propriedades como a seguir.

(Name) -> FrmPai
Text -> Formulario Pai
WindowState -> Maximized
IsMdiContainer -> True

A propriedade "IsMdiContainer" que torna o nosso form um formulario Pai.

Nosso proximo passo é criar um segundo form que sera chamado atraves do formulario Pai. Para iss o, clique com o botão direito do mouse sobre o projeto no "Solution Explorer", vá em Add e logo após em "Windows Form ..."

Na janela que se abriu mude o campo Name para FrmFilho e de OK. O nosso formulario filho foi cri ado com sucesso, agora vamos alterar o titulo do FrmFilho como a seguir:

Text -> Formulario Filho

Bem, agora vamos voltar para o formulario Pai, pois é de la que chamaremos o formulario filho. A bra o ToolBox e arraste um MenuStrip para o form pai, sera criado uma barra na parte superior do mesmo e um campo esc rito "Type here" onde digitaremos o que vai ser exibido no menu, vamos colocar "Formulario Filho". Após colocar o tex to do menu, clique duas vezes em cima do nome que vc colocou, sera exibido o metodo que vai ser chamado quando clicar mos nesse menu. É nesse metodo que chamaremos nosso form filho. Segue o codigo que deve ser inserido nesse método.

FrmFilho filho = new FrmFilho();
filho.MdiParent = this;
filho.Show();

A propriedade MdiParent de um Form diz qual é o formulario Pai deste. No caso usamos a palavra r eservada this, que indica o próprio formulário Pai.

Pressione F5 para executar a aplicação. Após aberto o formulario principal, clique no menu super ior e você verá que o formulario Filho sera aberto dentro do formulario Pai e não em uma janela separada.

Um detalhe, é que cada vez que você clicar no menu, sera criado uma nova janela, isso em uma apl icação não é uma boa, ja após aberta uma tela de cadastro de clientes por exemplo, não queremos que a mesma seja aber ta novamente. Para resolver isso, crie um método no formulario Pai que verifica se existe o formulario, se não existi r ele cria, se existir somente da foco no mesmo.

Para isso, clique no formulario Pai em nosso projeto e depois pressione F7, será exibido o codig o fonte do formulario, logo apos ao construtor do form, crie o metodo como a seguir:

//Metodo construtor
public FrmPai()
{
InitializeComponent();
}

//metodo para abrir formulario filho
private void abreFormFilho(Form form)
{
foreach (Form formFilho in this.MdiChildren)
{
if (formFilho.GetType() == form.GetType())
{
formFilho.Focus();
return;
}
}
form.MdiParent = this;
form.Show();
}

Desca para o final do código, onde esta o metodo que chama o nosso formulario filho atravez do m enu, tire as três linhas que inserimos anteriormente e digite o codigo a seguir.

        this.abreFormFilho(new FrmFilho());

Pronto, agora é só executar o projeto de novo com F5 e você vera que mesmo clicando mais vezes n o menu, não será criado varias janelas do FrmFilho.

Bem, fico por aqui. Agradeço a paciência e espero ter ajudado. Dúvidas, sujestões ou críticas entrem em contato.

contato@thiagoapadua.com.br