VB .NET - Criando uma Agenda com MonthCalendar


 No artigo de hoje vou mostrar como podemos criar uma agenda básica que permite gravar e ler apontamentos usando o controle MonthCalendar do VB .NET.

A classe MonthCalendar representa o controle MonthCalendar do VB .NET e no artigo VB.NET - Usando o controle MonthCalendar - Macoratti.net eu abordei as principais propriedades e métodos deste controle.

Neste artigo eu vou mostrar como criar uma agenda de compromissos que permite ao usuário registrar e ler apontamentos para uma data selecionada no controle MonthCalendar.

O evento DateSelected ocorre quando o usuário realizar a seleção de uma data no controle MonthCalendar.

Em nosso exemplo vamos usar esse evento para permitir ao usuário gravar e ler um apontamento em um arquivo texto que será montando com base no ano , mês e dia da data selecionada.

Para isso vamos usar a propriedade SelectionRange que obtém ou define o intervalo de datas para um controle de calendário do mês selecionado.

Assim para obter a data inicial selecionada podemos usar o seguinte código :  MonthCalendar1.SelectionRange.Start

Para obter o ano o mês e o dia usamos o código a seguir:

O nome do arquivo onde os agendamentos serão gravados será composto pelo ano, mês e dia mais a extensão .txt. Ex: 20152306.txt

 

Para gravar, ler e deletar os apontamentos iremos usar os métodos ReadAllText, WriteAllText e Delete da classe File que esta no namespace System.IO.

 

Recursos usados :

Criando o projeto no VS 2013 Express Edition

Abra o VS 2013 Express for Windows desktop e clique em New Project;

A seguir selecione Visual Basic -> Windows Forms Application;

Informe o nome Agenda e clique no botão OK;

No formulário form1.vb vamos incluir os seguintes controles a partir da ToolBox:

Disponha os controles no formulário conforme o leiaute da figura abaixo:

A seguir defina no formulário o seguinte namespace:

Imports System.IO

Defina também no início do formulário a variável reg que irá representar o nome do nosso arquivo texto para a data selecionada.

Dim reg As String

Após isso defina o código no evento DateSelected do controle MonthCalendar :

Private Sub mCal_DateSelected(sender As Object, e As DateRangeEventArgs) Handles mCal.DateSelected
        reg = mCal.SelectionRange.Start.Year.ToString & mCal.SelectionRange.Start.Month.ToString & mCal.SelectionRange.Start.Day.ToString
        Try
            If File.Exists(reg & ".txt") = True Then
                AtivaControles()
                txtAgenda.Text = File.ReadAllText(reg & ".txt")
            Else
                If MessageBox.Show("Deseja registrar apontamentos para esta data ?", "Registrar", MessageBoxButtons.YesNo) = 
Windows.Forms.DialogResult.Yes Then
                    txtAgenda.Text = ""
                    AtivaControles()
                    txtAgenda.Text = "Dia " & mCal.SelectionRange.Start.Day.ToString & " - "
                End If
            End If
        Catch ex As Exception
            MessageBox.Show("Erro " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

 

Neste código montamos o nome do arquivo texto com base na data selecionada e após verificar se o arquivo existe exibimos o conteúdo do arquivo texto no TextBox ou emitimos uma mensagem ao usuário para registrar ou não agendamentos.

 

Se o usuário confirmar chamamos o método AtivaControles() que oculta o calendário e exibe a caixa de texto para informar o agendamento.

O código do método AtivaControles() é visto abaixo:

Private Sub AtivaControles()
        Try
            mCal.Enabled = False
            mCal.Hide()
            txtAgenda.Enabled = True
            txtAgenda.Show()
            btnSalvar.Enabled = True
            btnSalvar.Show()
            btnRetornar.Enabled = True
            btnRetornar.Show()
        Catch
            Throw
        End Try
 End Sub

Ao apresentar a caixa de texto o usuário pode digitar o agendamento e clicar no botão Salvar cujo código é definido a seguir:

 Private Sub btnSalvar_Click(sender As Object, e As EventArgs) Handles btnSalvar.Click
        Try
            If txtAgenda.Text = "" Then
                If File.Exists(reg & ".txt") = True Then
                    If MessageBox.Show("Deseja deletar o agendamento registrado para este dia ? ", "Deletar", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                        File.Delete(reg & ".txt")
                    End If
                End If
            Else
                If txtAgenda.Text.Length > 0 Then
                    File.WriteAllText(reg & ".txt", txtAgenda.Text)
                    MessageBox.Show("Agendamento registrado com sucesso." + reg, "Agendado", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End If
            End If
        Catch ex As Exception
            MessageBox.Show("Erro " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Após o usuário digitar o texto do agendamento a clicar no botão Salvar, o método WriteAllText da classe File grava os dados no arquivo.

Se já existia um agendamento e o usuário limpar o texto e clicar no botão Salvar o arquivo contendo o agendamento para o dia será deletado usando o método Delete() da classe File.

Após isso o usuário poderá clicar no botão Retornar para voltar exibir o calendário e ocultar a caixa de texto e os botões. O código associado ao evento Click deste botão é visto abaixo:

  Private Sub btnRetornar_Click(sender As Object, e As EventArgs) Handles btnRetornar.Click
        Try
            txtAgenda.Enabled = False
            txtAgenda.Hide()
            btnSalvar.Enabled = False
            btnSalvar.Hide()
            btnRetornar.Enabled = False
            btnRetornar.Hide()
            mCal.Enabled = True
            mCal.Show()
        Catch ex As Exception
            MessageBox.Show("Erro " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
  End Sub

Finalmente vamos usar o evento Load do formulário form1 para verificar se na data de hoje existe algum agendamento gravado, e, em caso positivo, vamos exibir uma mensagem ao usuário para exibir ou não o agendamento.

O código usado é descrito a seguir:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        reg = mCal.SelectionRange.Start.Year.ToString & mCal.SelectionRange.Start.Month.ToString & mCal.SelectionRange.Start.Day.ToString    
        Try
            If Date.Today = mCal.TodayDate And File.Exists(reg & ".txt") = True Then
                If MessageBox.Show("Existem registros na Agenda para esta data. Deseja ver ? ", "Ver Agenda", MessageBoxButtons.YesNo) = 
Windows.Forms.DialogResult.Yes Then
                    AtivaControles()
                    txtAgenda.Text = File.ReadAllText(reg & ".txt")
                End If
            End If
        Catch ex As Exception
            MessageBox.Show("Erro " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
 End Sub

Executando o projeto e realizando algumas operações iremos obter:

1- Selecionando o dia de hoje

2- Gravando um agendamento para hoje

3- Carregando o projeto para o dia de hoje

Você pode incluir outras funcionalidades ao projeto tornando-o mais funcional e com mais recursos.

Na próxima parte vou mostrar como podemos vincular uma data selecionada no controle MonthCalendar.

Pegue o projeto completo aqui:  AgendaMonthCalendar.zip

Disse Jesus : "Uma geração má e adúltera pede um sinal, e nenhum sinal lhe será dado, senão o sinal do profeta Jonas. E, deixando-os, retirou-se."
Mateus 16:4

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti