DateTimePicker Valor padrão: Como evitá-lo?
-
05-07-2019 - |
Pergunta
Fatos:
- Eu tenho um TabControl com 2 guias, cada guia tem 2 DateTimePicker.
- No evento Load, eu definir o valor de todas as DTPs.
- Todos DTPs ter ShowCheckBoxes definido em conjunto verdadeiro e verificado em falso.
- Quando eu executar o programa, a DTPs em primeira guia são OK, mas quando eu verificar as DTPs na segunda guia, eles mostram o tempo atual, não o I tempo definido no evento de carga.
Por que isso aconteceu? Como posso evitá-lo?
Solução 3
Minha solução feio para esta questão, consiste no conjunto ativo na guia em que reside do DTP antes de mudar seus valores, algo como isto:
DateTime dat1 = DateTime.Today;
DateTime dat2 = dat1.AddDays(1).AddSeconds(-1);
dtpCreatedStart.Value = dat1;
dtpCreatedEnd.Value = dat2;
tbc.SelectTab(1);
dtpModifiedStart.Value = dat1;
dtpModifiedEnd.Value = dat2;
tbc.SelectTab(0);
Outras dicas
Eu descobri qual era o problema aqui.
A propriedade Value
só estabelece um novo valor se o controle DateTimePicker
é visível. Caso contrário, o comando é ignorado.
Caso de teste:
não funciona:
this.picker = new DateTimePicker
{
Checked = false,
Font = new System.Drawing.Font("Verdana", 9.75F),
Format = System.Windows.Forms.DateTimePickerFormat.Time,
Location = new System.Drawing.Point(5, 5),
Name = "picker",
ShowUpDown = true,
Size = new System.Drawing.Size(120, 23),
Visible = false
};
this.Controls.Add(this.picker);
this.picker.Value = this.picker.Value.Date.AddHours(1);
this.picker.Visible = true;
Works:
this.picker = new DateTimePicker
{
Checked = false,
Font = new System.Drawing.Font("Verdana", 9.75F),
Format = System.Windows.Forms.DateTimePickerFormat.Time,
Location = new System.Drawing.Point(5, 5),
Name = "picker",
ShowUpDown = true,
Size = new System.Drawing.Size(120, 23),
Visible = false
};
this.Controls.Add(this.picker);
this.picker.Visible = true;
this.picker.Value = this.picker.Value.Date.AddHours(1);
Não parece ter nada a ver com a adição programaticamente o selecionador parece.
Tem a ver com a propriedade verificado do DateTimePicker. É geralmente definida como falsa. Pelo menos esse era o problema para mim.
Depois de definir o datetimepicker.checked como verdadeiro, ele fez recuperar o valor de configurações.
DateTimePicker tem alguns problemas com armazenamento e recuperação de seu valor. Eu tive problemas ao vincular o valor para um DateTime não anulável - Eu tenho NullReferenceExeptions de vez em quando. Não faço ideia por que ou quando. Às vezes, apenas aconteceu e bateu o aplicativo.
Eu corri para o mesmo problema usando dois DateTimePickers. Eu era capaz de obter os dois para mostrar o valor correto, gerando-los dinamicamente e adicioná-los ao formulário.
Se você não pode fazê-lo funcionar, você sempre pode tentar usar um selecionador diferente. O Qualquer + Tempo (TM) Datepicker / timepicker AJAX Calendário widget puxa o seu valor a partir do campo associado, então, se você inicializar o campo com um valor, ou alterar um campo para ter um valor (como no onload), então é isso que você vai ter quando o seletor é exibido. E se você tiver problemas com ele, basta enviar uma mensagem através da página de contato, e será abordada ASAP.