Criando um Controle Personalizado de Exibição de Horário em C#

Criando o Projeto

No Visual Studio, acesse o menu Arquivo > Novo > Projeto. Selecione o template Biblioteca de Controles do Windows Forms. O nome do arquivo .cs pode ser persoanlizado conforme a preferência.

Montando a Interface do Controle

Após confirmar, uma área de design de 150x150 pixels será exibida. Arraste um componente Label e um Timer da caixa de ferramentas para a superfície de design. Defina a proprieddae Interval do Timer como 1000 milissegundos (1 segundo).

O componente Timer funciona como um disparador periódico: quando sua propriedade Enabled está ativa, o evento Tick é executado repetidamente a cada intervalo definido em Interval, até que Enabled seja desativado.

Implementando a Lógica Básica

Dê um duplo clique no Timer para acessar o editor de código:

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace RelogioControl
{
    public partial class DisplayHorario : UserControl
    {
        public DisplayHorario()
        {
            InitializeComponent();
            cronometroPrincipal.Enabled = true;
        }

        private void cronometroPrincipal_Tick(object remetente, EventArgs args)
        {
            rotuloHora.Text = DateTime.Now.ToString();
        }
    }
}

Pressione F5 para compilar e testar o controle no contêiner de teste.

Ajustando o Layout

Feche a janela de teste e retorne ao designer. Selecione o UserControl e altere Size para 160, 12. No Label, ajuste propriedades como AutoSize, Font e TextAlign conforme necessário.

Adicionando Formatos Personalizados

Para permitir que os consumidores do controlem escolham o formato de exibição, expomos uma propriedade baseada em enumeração:

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace RelogioControl
{
    public partial class DisplayHorario : UserControl
    {
        public enum FormatoData
        {
            Padrao,
            DataPorExtenso,
            HoraCompleta,
            DataCurta,
            HoraCurta,
            Personalizado
        }

        private FormatoData _estilo = FormatoData.Padrao;

        [Category("Comportamento")]
        [Description("Define o formato de exibição do horário")]
        public FormatoData EstiloExibicao
        {
            get { return _estilo; }
            set
            {
                _estilo = value;
                AtualizarHorario();
            }
        }

        public DisplayHorario()
        {
            InitializeComponent();
            cronometroPrincipal.Enabled = true;
        }

        private void cronometroPrincipal_Tick(object remetente, EventArgs args)
        {
            AtualizarHorario();
        }

        private void AtualizarHorario()
        {
            DateTime agora = DateTime.Now;

            switch (_estilo)
            {
                case FormatoData.DataPorExtenso:
                    rotuloHora.Text = agora.ToLongDateString();
                    break;
                case FormatoData.HoraCompleta:
                    rotuloHora.Text = agora.ToLongTimeString();
                    break;
                case FormatoData.DataCurta:
                    rotuloHora.Text = agora.ToShortDateString();
                    break;
                case FormatoData.HoraCurta:
                    rotuloHora.Text = agora.ToShortTimeString();
                    break;
                case FormatoData.Padrao:
                    rotuloHora.Text = agora.ToString();
                    break;
                default:
                    rotuloHora.Text = agora.ToString("dd/MM/yyyy HH:mm:ss");
                    break;
            }
        }
    }
}

Compile novamente com F5. A propriedade EstiloExibicao agora estará disponível na janela de propriedades do controle, permitindo selecionar diferentes formatos de data e hora em tempo de design.

Tags: C# Windows Forms UserControl Timer .NET

Publicado em 7-7 01:23