Olá pessoal, na segunda parte de nosso artigo vamos finalizar a criação dos formulários filhos para começarmos a codificação dos mesmos, fazendo o cadastro, alteração, deleção e consulta dos dados. Acompanhem:

 Voltando da onde paramos, adicione um novo Windows Forms, dê a ele o nome de frmCadastrarClientes e clique em OK.

 Deixe as propriedades parecidas com os forms anteriores (apenas altere a propriedade MinimizeBox para False e Size para 550;400 nos forms filhos), altere os botões, agora teremos 2 no topo: Gravar Dados e Cancelar Cadastro. Teremos também 1 botão no rodapé que será o Voltar, nesse último botão altere a propriedade Enabled para False. Os ID’s destes botões são: tsbtnGravar, tsbtnCancelar e tsbtnVoltar.

 Agora arraste da ToolBox alguns controles referentes aos dados do cliente a ser gravado (quaisquer dúvidas sobre os controles a serem usados, é só conferir os campos na tabela de Clientes que criamos na parte anterior do artigo).

 Antes de tudo, aperte F7 para ir à página de códigos. Nela, crie os seguintes métodos:

private void DesabilitaBotoes(object sender, EventArgs e)

        {

            tsbtnAlterarExcluir.Enabled = false;

            tsbtnCadastrar.Enabled = false;

            tsbtnConsultar.Enabled = false;

            tsbtnVoltar.Enabled = false;

            tsbtnSair.Enabled = false;

        }

 

        private void HabilitaBotoes(object sender, EventArgs e)

        {

            tsbtnAlterarExcluir.Enabled = true;

            tsbtnCadastrar.Enabled = true;

            tsbtnConsultar.Enabled = true;

            tsbtnVoltar.Enabled = true;

            tsbtnSair.Enabled = true;

        }

 Como vocês podem imaginar, estes códigos servem para habilitar/desabilitar os botões do formulário pai.

 No modo Design, dê dois cliques no botão Cadastrar Clientes e adicione o seguinte código:

private void tsbtnCadastrar_Click(object sender, EventArgs e)

        {

            frmCadastrarFuncionarios objFrmCadastrarFuncionarios = new frmCadastrarFuncionarios();

 

            //Informo a aplicação que o frmCadastrarFuncionarios é o form filho do frmFuncionarios

            objFrmCadastrarFuncionarios.MdiParent = this;

 

            //Chamo o método que desativa os botões do formulário pai

            this.DesabilitaBotoes(sender, e);

 

            //Vinculo ao botão Cancelar Cadastro, do form filho o método para ativar os botões do formulário pai, por meio de delegate

            objFrmCadastrarFuncionarios.tsbtnCancelar.Click += new EventHandler(this.HabilitaBotoes);

 

            //Vinculo ao botão Voltar, do form filho, o método para ativar os botões do formulário pai, por meio de delegate

            objFrmCadastrarFuncionarios.tsbtnVoltar.Click += new EventHandler(this.HabilitaBotoes);

 

            //Verifico se o form já está aberto. Se estiver impeço a abertura de um novo e exibo uma mensagem ao usuário

            if (objFrmCadastrarFuncionarios.Visible == false)

            {

                objFrmCadastrarFuncionarios.Show();

            }

            else

            {

                MessageBox.Show("O formulário já está aberto com a gravação dos dados em andamento! Feche este formulário para abrir outro!",

                                                                    "Mensagem do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

            }

        }

 Rode o sistema, clique em Clientes e clique no botão Cadastrar Clientes. Seu form recém-criado deverá aparecer:


 A idéia é a seguinte: quando eu clico no botão Cadastrar do formulário pai, abro o formulário filho, desabilito os controles do form pai, e deixo também desabilitado o botão Voltar do form filho.

 Dessa forma o usuário só poderá sair do Cadastro clicando no botão Cancelar. O botão Voltar será habilitado após o usuário ter gravado ao menos um registro com sucesso.

 Note que se eu clicar em Cancelar Cadastro e clicar em Sim, os botões do formulário pai serão habilitados.

 Os ID’s usados nestes controles são: txtNome, txtEndereco, txtCidade, ddlEstado, mtbTelefone, rbtAtivo e rbtInativo.

 Obs: no campo Telefone usei um controle chamado MaskedTextBox, na propriedade Mask dele, escolhi a opção Phone Number.

 Crie outros 2 forms como esse, um para os Cadastro de Funcionários, dando o nome de frmCadastrarFuncionario (sempre seguindo a lógica do form de Clientes):


 Obs: nos campo Data Admissão e Data Demissão usei novamente o MaskedTextBox, e na propriedade Mask dele, escolhi a opção Short date.

 E um form para o Cadastro de Livros, com o nome de frmCadastrarLivros (sempre usando a mesma idéia de formulários MDI, aplicada no form de Cadastrar Clientes):

 

 Os ID’s usados nos controles do frmCadastrarFuncionario são: txtNome, txtEndereco, txtCidade, ddlEstado, mtbTelefone, mtbDataAdmissao, mtbDataDemissao e txtCargo. Os ID’s usados nos controles do frmCadastrarLivros são: txtNomeLivro, txtAutor, txtAno, txtPaginas, txtGenero, txtEditora, rbtDisponivel e rbtIndisponivel.

 Ok, formulários de Cadastro criados, vamos partir para os de Consulta. Adicione um novo Windows Forms, dando o nome a ele de frmConsultaClientes. Nele, vamos adicionar alguns controles para que, por exemplo, o funcionário da Biblioteca possa filtrar Clientes pelo Nome, Cidade ou Status. O resultado da filtragem do funcionário irá aparecer no mesmo formulário, dentro de um ListView.

  Volte ao modo Design do formulário pai, dê dois cliques no botão Consultar e adicione o seguinte código:

private void tsbtnConsultar_Click(object sender, EventArgs e)

        {

            frmConsultarClientes objFrmConsultarClientes = new frmConsultarClientes();

 

            //Informo a aplicação que o frmConsultarClientes é o form filho do frmClientes

            objFrmConsultarClientes.MdiParent = this;

 

            //Chamo o método que desativa os botões do formulário pai

            this.DesabilitaBotoes(sender, e);

 

            //Vinculo ao botão Cancelar Cadastro, do form filho o método para ativar os botões do formulário pai, por meio de delegate

            objFrmConsultarClientes.tsbtnVoltar.Click += new EventHandler(this.HabilitaBotoes);

 

            //Verifico se o form já está aberto. Se estiver impeço a abertura de um novo e exibo uma mensagem ao usuário

            if (objFrmConsultarClientes.Visible == false)

            {

                objFrmConsultarClientes.Show();

            }

            else

            {

                MessageBox.Show("O formulário já está aberto com a gravação dos dados em andamento! Feche este formulário para abrir outro!",

                                                                    "Mensagem do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

            }

        }

  Apenas lembre-se que você deverá instanciar o formulário filho antes de chamá-lo no evento Click do botão Consultar. Volte ao modo Design, clique na SmartTag do ListView, clique em Edit Columns, e adicione as seguintes colunas (no campo Text): Código (altere a propriedade Width para 0, já que não precisamos mostrar o código do cliente para o usuário), Endereço, Cidade, Estado, Telefone e Status. Seu form deverá ficar da seguinte forma:


 Perceba que utilizei diversos controles, o ID deles são os seguintes: gpbOpcoes (para o GroupBox), rbtNome (com a propriedade Checked como True), rbtCidade, rbtStatus, txtConsulta, temos também 2 RadioButton’s, só que estão invisíveis: rbtAtivo (com a propriedade Checked como True e Visible como False) e rbtInativo (com a propriedade Visible como False). Temos também o btnConsultar, lsvDados, que é meu ListView, e que contém as propriedades GridLines como True, FullRowSelect como True, para selecionarmos a linha inteira do registro, MultiSelect como False, para que só selecionemos um único registro por vez, BorderStyle como FixedSingle e View como Details. Finalizando temos também o botão Voltar com o ID tsbtnVoltar

 Crie os forms de Consulta para Funcionários e Livros iguais a este que acabamos de criar, apenas altere as colunas de acordo com os dados da respectiva tabela do banco (não se esqueça de adicionar a coluna Código).

 Para o de Livros, vamos filtrar por Nome do Livro, Editora e Status. Lembre-se de incluir dois Radio Buttons para o Status, que terão os valores Disponível e Indisponível e terão o atributo Visible como False. Veja como ficará nosso form:


 Para o form de Funcionarios, filtraremos por Nome, Estado e Cargo. Veja como ele ficará:


 Finalizando a criação dos formulários filho, adicione um novo Windows Form, dando a ele o nome de frmAlterarExcluirClientes e clique OK. Arraste pra ele apenas um Label e um DataGridView, dando o ID de dgvDados para o grid e lblMensagem para o Label. Abra a SmartTag do grid e desmarque as opções Enable Adding, Enable Editing e Enable Deleting, não precisamos dessas opções já que nossos dados virão de nosso banco de dados, e usaremos os botões Editar e Excluir para essa finalidade.

 Copie para este form o botão de Voltar dos outros forms. Na SmartTag do GridView, adicione as seguinte colunas: Nome, Endereço, Cidade, Estado, Telefone, Status e mais duas colunas do tipo DataGridViewButtonColumn, ou seja serão botões, com os nomes Editar e Excluir (só incluir estes nomes na propriedade Text). Seu form deverá ficar da seguinte forma:


 Lembre-se de ir ao formulário pai, de Clientes, e fazer a chamada a este form que acabamos de criar. Crie mais 2 formulários, para alteração/exclusão de Funcionários e Livros, e aplique as mesmas configurações que fizemos nesse form.

 Talvez precisaremos criar mais 3 pequenas telas, que serão para editarmos os dados do grid acima, e dos outros forms. Mais isso ficará para a próxima e última parte.

 Para quem se interessar em fazer o download do código-fonte do projeto (feito no Visual Studio 2008), baixe neste post

 Assim finalizo o artigo. Na próxima parte finalmente iremos codificar as telas. Começaremos pelas telas de Cadastro, depois vamos para a de Consulta dos dados e vamos fechar com a Alteração / Exclusão dos dados. Aguarde!

 Um abraço, e até o próximo artigo

 Wellington Balbo de Camargo

 wellingtonbalbo@gmail.com