Bom primeiramente feliz ano novo.
Nesses últimos meses foi difícil manter o blog, infelizmente foi muito difícil manter o foco no trabalho, estudos e blog ao mesmo tempo.
Mas como em todo ano que se inicia costumamos traçar metas, uma das minhas é publicar conteúdo com mais regularidade.
Um recurso bem legal das novas versões do .Net é o delegate, principalmente a partir do 3.0. Abaixo vou colocar um exemplo de como utilizar o delegate do tipo Action.
//Versão 1
private void mtcDate_DateChanged(object sender, DateRangeEventArgs e)
{
DateTime date = this.mtcDate.SelectionEnd;
this.dtpInitital.Value = new DateTime(date.Year
, date.Month
, date.Day
, this.dtpInitital.Value.Hour
, this.dtpInitital.Value.Minute
, this.dtpInitital.Value.Second);
this.dtpFinal.Value = new DateTime(date.Year
, date.Month
, date.Day
, this.dtpFinal.Value.Hour
, this.dtpFinal.Value.Minute
, this.dtpFinal.Value.Second);
this.lblSelectedDate.Text = date.ToShortDateString();
}
O controle dtpInitital e dtpFinal são do mesmo tipo, perceba que eu tive que repetir o mesmo código para cada controle. Pra não ter que fazer isso, podemos criar um método para executar as alterações nessárias no valor dos controles da seguinte forma:
private void mtcDate_DateChanged(object sender, DateRangeEventArgs e)
{
DateTime date = this.mtcDate.SelectionEnd;
ChangedDate(this.dtpInitital, date);
ChangedDate(this.dtpFinal, date);
this.lblSelectedDate.Text = date.ToShortDateString();
}
private void ChangeDate(DateTimePicker control, DateTime date)
{
control.Value = new DateTime(date.Year
, date.Month
, date.Day
, control.Value.Hour
, control.Value.Minute
, control.Value.Second);
}
No exemplo acima criamos o método ChangeDate para realizar as alterações nos controles que passamos no parâmetro, mas tivemos que criar um método que será chamado sempre pelo mesmo método, agora veja a mesma solução com delegate.
private void mtcDate_DateChanged(object sender, DateRangeEventArgs e)
{
DateTime date = this.mtcDate.SelectionEnd;
Action<DateTimePicker> changedDate = null;
changedDate = delegate(DateTimePicker control)
{
control.Value = new DateTime(date.Year
, date.Month
, date.Day
, control.Value.Hour
, control.Value.Minute
, control.Value.Second);
};
changedDate(this.dtpInitital);
changedDate(this.dtpFinal);
this.lblSelectedDate.Text = date.ToShortDateString();
}
Perceba que agora colocamos o método dentro do escopo do evento, não temos a repetição de código que tivemos no primeiro controle e nem criamos um método no escopo da classe que será chamado sempre pelo memso lugar.
Nenhum comentário:
Postar um comentário