VB.NET 2008 - Cadastro de Alunos - parte 3
Na segunda parte deste artigo definimos a carga de dados, a navegação pelos registros e as operações básicas de manutenção de dados. Neste último artigo veremos o código dos botões : Imprimir, Deletar, Sair e Carregar Foto.
Lembrando que a aplicação possui somente um formulário chamado Alunos.vb e que estamos usando o Visual Basic 2008 Express Edition.
Definindo a impressão
A seguir eu vou mostrar o código usado para imprimir os dados , inclusive a foto do cadastro de alunos. Em meu artigo Impressão e Visualização. O que há de novo ? eu apresento o namespace System.Drawing.Printing e a classe PrintDocument e o componente PrintPreviewDialog. Eles são os pilares da impressão no VB .NET.
No artigo Criando um editor de textos no VB .NET eu mostro como você pode criar um editor de textos com recursos de impressão usando as classes e em meu artigo Imprimindo no VB 2005 a eu volto ao assunto descrevendo o processo usado para imprimir no VB. Então repetindo o que eu já disse:
Para imprimir no VB.NET temos a seqüência que deve ser seguida:
1- Primeiro, você deve instanciar um objeto PrintDocument
2- A seguir você tem que criar uma instância de um objeto PrintDialog e definir a referência para o objeto PrintDocument:
Dim doc
As PrintDocument = New PrintDocument Dim printer As PrintDialog = New PrintDialog printer.Document = doc |
3- Em seguida você deve mostrar a caixa de diálogo onde o usuário pode selecionar a impressora e suas propriedades: printer.ShowDialog()
4- Agora você precisa subscrever o evento PrintDocument.PringPage o qual será disparado para cada nova página:
AddHandler doc.PrintPage, AddressOf PrintPageHandler
5- Chamar o método Print;
6- Implementar o tratamento de evento para o evento PrintDocument.PrintPage onde nos desejamos imprimir o texto.
Então inclua no formulário o componente PrintPreviewDialog alterando o seu nome para dlgVisualiza. Agora no evento Click do botão Imprimir inclua o código:
Private
Sub btnImprimir_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs)
Handles
btnImprimir.Click
'Cria o documento e da nome ao mesmo AlunosDocument = New Drawing.Printing.PrintDocument()AlunosDocument.DocumentName = "Alunos"'incluir o manipulador de eventos AddHandler AlunosDocument.PrintPage, AddressOf Me.ImprimirAlunos
dlgVisualiza.Document = AlunosDocument dlgVisualiza.ShowDialog() 'libera o documento apos imprimir AlunosDocument.Dispose() AlunosCManager.Position = SavedPosition End Sub |
Agora temos que codificar a rotina ImprimirAlunos que irá realizar o trabalho de impressão. O código é o seguinte:
Private Sub ImprimirAlunos(ByVal sender As Object, ByVal e As Drawing.Printing.PrintPageEventArgs)'desenha a bordar Dim MyPen As Pen = New Pen(Color.Black, 3) e.Graphics.DrawRectangle(MyPen, e.MarginBounds.X, e.MarginBounds.Y, 450, 480) Dim MyFont As Font = New Font("Arial", 12, FontStyle.Bold) Dim S As String = My.Settings.Escola.ToString
Dim SSize
As
SizeF = e.Graphics.MeasureString(S, MyFont) e.Graphics.DrawString(S, MyFont, Brushes.Black, e.MarginBounds.X + CInt(0.5 * (250 - SSize.Width)), e.MarginBounds.Y + 15)
e.Graphics.DrawImage(picItem.Image, e.MarginBounds.X + 25, e.MarginBounds.Y + 50, 400, 300) e.HasMorePages = False'define os campos a serem impressos MyFont = New Font("Arial", 14)Dim Y As Integer = e.MarginBounds.Y + 400
SSize = e.Graphics.MeasureString(S, MyFont) e.Graphics.DrawString(S, MyFont, Brushes.Black, e.MarginBounds.X + CInt(0.5 * (300 - SSize.Width)), Y)
'S = txtLastName.Text 'SSize = e.Graphics.MeasureString(S, MyFont) ' e.Graphics.DrawString(S, MyFont, Brushes.Black, e.MarginBounds.X + CInt(0.5 * (300 - SSize.Width)), Y) 'Y += CInt(MyFont.GetHeight(e.Graphics))
SSize = e.Graphics.MeasureString(S, MyFont)
End Sub |
Ao clicar no botão Imprimir o resultado obtido será o seguinte:
Usando o recurso do Zoom para aumentar a imagem você pode obter:
Excluindo dados
O código do botão Deletar é exibido a seguir. Após confirmação usamos o método RemoveAt do CurrencyManager e em seguida chamamos a rotina ExibirDados().
Private
Sub btnDeletar_Click(ByVal
sender As System.Object,
ByVal e As System.EventArgs)
Handles btnDeletar.Click If MessageBox.Show("Confirma e exclusão deste registro ? ", "Deletar", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then AlunosCManager.RemoveAt(AlunosCManager.Position) Call ExibirDados() End If Call definirEstado("Ver")End Sub |
Carregando a foto
Quando clica no botão Carregar Foto é aberto uma janela de diálogo Abrir para que um arquivo de foto seja selecionado. Após selecionar uma imagem clique no botão Salvar. O código que faz tudo isso é dado abaixo:
Private
Sub
btnCarregaFoto_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs)
Handles
btnCarregaFoto.Click
Try If dlgAbrir.ShowDialog = Windows.Forms.DialogResult.OK Then'obtem o caminho e nome da imagem nomeImagem = dlgAbrir.FileName 'obtem a posição da / na string Dim posicaoBarra As Integer = nomeImagem.LastIndexOf("\") 'extrai somente o nome do arquivo da string e atribui a lblFoto lblFoto.Text = nomeImagem.Substring(posicaoBarra + 1) 'chama a rotina para exibir a foto Call ExibirFoto() End If Catch ex As Exception MessageBox.Show(ex.Message, "Erro ao abrir Foto.", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
|
Para encerrar o programa temos o código abaixo associado ao evento Click do botão Sair:
Private
Sub btnSair_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs)
Handles
btnSair.Click
If (MessageBox.Show("Deseja
sair ?", "Sair",
MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes)
Then
Me.Close() End If End Sub |
Com isso terminei a apresentação da aplicação Cadastro de Alunos usando todos os recursos de manutenção de dados e navegação pelos registros. Tudo isso com exibição de imagens e impressão também.
A única coisa que faltou foi mostrar como gerar o pacote para instalação usando a tecnologia ClickOnce. Para isso basta seguir as orientações do meu artigo:
O projeto completo esta no Super DVD .NET e no Super CD .NET
Referências:
José Carlos Macoratti