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