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


'Declara o printdocument

Dim AlunosDocument As Drawing.Printing.PrintDocument


'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


'Imprime no modo de visualização

Dim SavedPosition As Integer = AlunosCManager.Position

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)


'posiciona a imagem

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


S = txtNome.Text +
" " + txEndereco.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))


'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))


S = lblGrau.Text +
"o Grau "

SSize = e.Graphics.MeasureString(S, MyFont)


e.Graphics.DrawString(S, MyFont, Brushes.Black, e.MarginBounds.X +
CInt(0.5 * (300 - SSize.Width)), Y)


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


Dim nomeImagem As String


dlgAbrir.InitialDirectory = localfotos

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:

ou ainda

O projeto completo esta no Super DVD .NET e no Super CD .NET

Referências:


José Carlos Macoratti