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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top