Olha eu aqui de novo.Hoje vou escrever um pouco sobre mascaras em TextBox. Mais especificamente sobre uma TextBox com mascara de horario no formato xx:xx que eu precisei fazer, mas a logica basica para criar uma mascara serve como ideia, fora isso, so e necessario aplicar as regras especificas dependendo das regras da sua mascara.O post de hoje e um pouco diferente, pois eu nao vou, digamos assim, "dar o assunto por encerrado", a ideia e deixar a minha mascara incompleta, ou seja, nao aplicar todas as regras necessarias.Por que?Primeiro: porque dependendo de como voce trabalha com a TextBox algumas regras podem ser desnecessarias, pois podem nunca acontecer.Segundo: porque e para ser uma ideia geral apenas e nao necessariamente completa.Terceiro e mais improvavel: se alguem ler e perguntar algo ou sugerir um problema relacionado especificamente com a mascara que eu vou abordar no post, eu posso fazer um edit e adicionar o caso sugerido.Bom, primeiro explicando a ideia basica.O objetivo e uma TextBox com uma mascara de horario xx:xx que, quando o usuario digitar, va substituindo do primeiro ao ultimo digito do horario automaticamente. Ela comecara com o valor 00:00 e as regras basicas que eu vou aplicar sao:1 - O primeiro digito das horas nao pode ser maior do que 2.2 - Se o primeiro digito das horas for 2 o segundo nao pode ser maior do que 3.3 - O primeiro digito dos minutos nao pode ser maior do que 5.4 - O usuario nao pode substituir o ':' em ocasiao alguma.Vamos supor que eu tenha uma TextBox chamada horario1 no meu WindowsForm.Ela e instanciada na parte de Design da minha classe entao nao vou entrar em detalhes dessa parte aqui.Meu foco e a parte do codigo na classe Form1.cs.Vejamos:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace Horarios{ public partial class Form1 : Form { public Form1() { InitializeComponent(); this.horario1.SelectionLength = 0; /* A modificacao abaixo pode ser feita pela interface, so pus aqui para deixar claro que a TextBox esta sendo inicializada dessa forma.*/ this.horario1.Text = "00:00"; } private void MascaraHorario_Enter(object sender, EventArgs e) { ((TextBox)sender).SelectionStart = 0; ((TextBox)sender).SelectionLength = 1; } private void MascaraHorario_KeyPress(object sender, KeyPressEventArgs e) { /*Essa linha serve para impedir o evento de ocorrer como normalmente ocorreria. E como dizer ao compilador que o evento ja foi tratado. Isso serve, nesse caso, como uma garantia de que a funcao de determinadas teclas nao seja executada.*/ e.Handled = true; /*Determina o numero de caracteres selecionados na TextBox, isso evita que o usuario selecione e substitua mais de um caracter, o que poderia remover a mascara da TextBox.*/ ((TextBox)sender).SelectionLength = 1; /*A propriedade SelectionStart indica a posicao do cursor. A partir dela podemos limitar as condicoes de cada caracter.*/ switch (((TextBox)sender).SelectionStart) { case 0: /*Cursor na posicao zero. Significa que o caracter a ser substituido e o primeiro.*/ switch (e.KeyChar) { /*Limitado para aceitar de 0 a 2.*/ case '0': case '1': case '2': /*Substitui o caracter selecionado pelo digitado.*/ ((TextBox)sender).SelectedText = e.KeyChar.ToString(); /*Uma vez executada essa instrucao a propriedade SelectionStart tera sido incrementada, o que