Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117

    [VB.NET] - DateTimePicker impazzito dopo il 2011?

    Non so se sia un bug o se è il mio Visual Studio 2008 ma se imposto il MaxDate e il MinDate del dateTimePicker da codice mi si incasina l'handler valueChanged del dateTimePicker stesso!

    Ovvero mi basta cliccarci sopra e mi esegue le istruzioni per l'handler valueChanged prima che il valore cambi (come se l'handler fosse al CLICK)

    Volevo sapere se è un bug conosciuto o se è solo il mio VS che fa le pizze...

    Questo succede solo quando si cambia l'anno!

    Provate a creare un nuovo progetto e metterci il dateTimePicker e impostate il maxDate e il minDate da codice (ES: mioDateTimePicker1.maxDate="31/12/2010") e poi sempre da codice cambiatelo (ES: mioDateTimePicker2.maxDate="31/12/2011") e date un 'istruzione stupida al valueChanged del controllo tipo:

    msgbox(mioDateTimePicker.value)

    e vedete se ve lo esegue anche prima che cambiate il valore data bensì al click :°

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Cioè così?:

    codice:
    Private Sub cmdSetMinMax_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSetMinMax.Click
        DateTimePicker1.Value = CDate("06/01/2010")
        DateTimePicker1.MinDate = CDate("01/01/2010")
        DateTimePicker1.MaxDate = CDate("31/12/2011")
        DateTimePicker1.Value = CDate(Date.Now)
    End Sub
    Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
        Label1.Text = DateTimePicker1.Value.ToString
    End Sub
    Nessun problema.


  3. #3
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Prova con questo:
    codice:
    Private Sub cmdSetMinMax_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSetMinMax.Click
        'primo settaggio limiti data
        DateTimePicker1.MinDate = CDate("01/01/2011")
        DateTimePicker1.MaxDate = CDate("31/12/2011")
        'secondo settaggio limiti data
        DateTimePicker1.MinDate = CDate("01/01/2010")
        DateTimePicker1.MaxDate = CDate("31/12/2010")
        DateTimePicker1.Value = CDate(Date.Now)
    
    End Sub
    Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
        Label1.Text = DateTimePicker1.Value.ToString
    End Sub

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ok, adesso capisco cosa intendi.
    La segnalazione di errore è logica, oltre che ovvia.

    Il problema è dovuto al fatto che tu stai cercando di impostare un MinDatead un valore maggiore del MaxDate, il che non può essere.
    Infatti :

    1. alla prima esecuzione,
    MinDate è impostato al valore minimo predefinito (01/01/1753) e così è per maxDate (31/12/9998), quindi i valori che imposti da codice rientrano nel range e non vanno in conflitto con essi.

    2. Invece, alla seconda esecuzione, il MaxDate è già impostato su 31/12/2010
    e tu cerchi di impostare il MinDate su 01/01/2011 che è maggiore di MaxDate,
    da qui l'errore.

    Strano che tu non ci abbia pensato...

  5. #5
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    No Gì non parlo di quell'errore!

    Purtroppo qui non ho VS2008 e non posso testare il codice! Prova ad ovviare a quell'errore e fagli cambiare l'anno di min e max date e vedi che quando poi clicchi sul controllo parte il valueChanged anche se ancora non l'hai cambiato!

    (sempre se ti fa lo stesso "bug")

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Veronica80
    No Gì non parlo di quell'errore!

    Purtroppo qui non ho VS2008 e non posso testare il codice! Prova ad ovviare a quell'errore e fagli cambiare l'anno di min e max date e vedi che quando poi clicchi sul controllo parte il valueChanged anche se ancora non l'hai cambiato!

    (sempre se ti fa lo stesso "bug")
    Io ho il VS2010, per cui qualsiasi prova io faccia non è detto che funzioni come in VS2008.

    Tra l'altro avevo già provato quello che chiedi: a me non succede.


  7. #7
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Uff

    Vabbè risolverò con l'handler CloseUp :P

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Originariamente inviato da Veronica80
    Prova con questo:
    codice:
    Private Sub cmdSetMinMax_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSetMinMax.Click
        'primo settaggio limiti data
        DateTimePicker1.MinDate = CDate("01/01/2011")
        DateTimePicker1.MaxDate = CDate("31/12/2011")
        'secondo settaggio limiti data
        DateTimePicker1.MinDate = CDate("01/01/2010")
        DateTimePicker1.MaxDate = CDate("31/12/2010")
        DateTimePicker1.Value = CDate(Date.Now)
    
    End Sub
    Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
        Label1.Text = DateTimePicker1.Value.ToString
    End Sub
    E' del tutto normale ciò, a ogni cambiamento dell'intervallo Min e Max delle date viene aggiornato anche il valore corrente del controllo e a ogni aggiornamento della data del controllo viene scatenato un'evento.
    Per cui se oggi è 20 dicembre 2010 e il controllo ha come valore corrente 20 Dicembre 2010 se tu imposti :

    DateTimePicker1.MinDate = CDate("01/01/2011")
    DateTimePicker1.MaxDate = CDate("31/12/2011")
    il valore corrente della data viene aggiornato automaticamente al valore minimo (essendo quello attuale piu piccolo), ovvero "01/01/2011" in questo modo:

    codice:
      If (Me.Value < Me.min) Then
         Me.Value = Me.min
      End If
    e ciò scatena un primo evento.
    Successivamente tu imposti:

    DateTimePicker1.MinDate = CDate("01/01/2010")
    DateTimePicker1.MaxDate = CDate("31/12/2010")
    il valore corrente della data viene aggiornato automaticamente al valore massimo, ovvero "31/12/2010" in questo modo:

    codice:
     If (Me.Value > Me.max) Then
          Me.Value = Me.max
     End If
    e ciò scatena un secondo evento.


    Sbagliare è umano, perseverare è diabolico.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.