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.