Vb.net date time picker

mercoledì 16 aprile 2008 - 11.56

ruby18 Profilo | Newbie

in una casella di testo ho inserito un datetimepicker, gli ho impostato il formato della data ma vorrei impostagli anche che se inserisco una data minore a quella di oggi la data deve diventare rossa, come faccio??? ho inserito il seguente codice ma mi da errore sul segno minore.....
Private Sub ins_ScadenzaPatente_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ins_ScadenzaPatente.ValueChanged
ins_ScadenzaPatente.Format = DateTimePickerFormat.Custom
ins_ScadenzaPatente.CustomFormat = "dd/MM/yyyy"
If ins_ScadenzaPatente.tToday Then
ins_ScadenzaPatente.ForeColor = Color.Red
End If

End Sub

Lanello Profilo | Senior Member

usando la funzione DATEDIFF puoi confrontare le due date, e dal risultato con un IF puoi cambiare lo stile del testo della cella

-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

ruby18 Profilo | Newbie

potresti farmi un esempio con il codice?

Lanello Profilo | Senior Member

più che volentieri...

eccolo...

Dim d1, d2 As Date d1 = Now 'data 1 d2 = Now.AddDays(2) 'data 2 If DateDiff(DateInterval.Day, d1, d2) < 0 Then Label1.ForeColor = Color.Red Else Label1.ForeColor = Color.Black End If

ciao!

-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

ruby18 Profilo | Newbie

purtroppo non funziona! mi dispiace!

ruby18 Profilo | Newbie

questo è il codice.
ins_ScadenzaPatente è casella di testo


Private Sub ins_ScadenzaPatente_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ins_ScadenzaPatente.ValueChanged
ins_ScadenzaPatente.Format = DateTimePickerFormat.Custom
ins_ScadenzaPatente.CustomFormat = "dd/MM/yyyy"
Dim d1, d2 As Date
d1 = Now 'data 1
d2 = Now.AddDays(2) ' data 2
If DateDiff(DateInterval.Day, d1, d2) < 0 Then
ins_ScadenzaPatente.ForeColor = Color.Red
Else
ins_ScadenzaPatente.ForeColor = Color.Black
End If
End Sub

Lanello Profilo | Senior Member

>Private Sub ins_ScadenzaPatente_ValueChanged(ByVal sender As
>System.Object, ByVal e As System.EventArgs) Handles ins_ScadenzaPatente.ValueChanged
>ins_ScadenzaPatente.Format = DateTimePickerFormat.Custom
> ins_ScadenzaPatente.CustomFormat = "dd/MM/yyyy"
> Dim d1, d2 As Date
> d1 = Now 'data 1
> d2 = Now.AddDays(2) ' data 2
> If DateDiff(DateInterval.Day, d1, d2) < 0 Then
> ins_ScadenzaPatente.ForeColor = Color.Red
> Else
> ins_ScadenzaPatente.ForeColor = Color.Black
> End If
> End Sub

Scusa tanto avevo sottointeso che tu capissi l'esempio , il mio pezzetto di codice che riporto qui sotto

Dim d1, d2 As Date d1 = Now 'data 1 d2 = Now.AddDays(2) 'data 2

è solo per avere due variabili che contengono due date diverse, e non è certo quello che tu devi incollare nel tuo codice!!!!

d1 = Now
dovrà diventare nel tuo codice la data inserita dall'utente
d2 = Now.AddDays(2)
sarà invece la tua data di riferimento

tu avresti dovuto prendere in considerazione SOLTANTO la funzione

DateDiff(DateInterval.Day, d1, d2)

che accetta come parametri quella che possiamo definire l'unità di misura per calcolare la differenza (nel nostro caso i giorni) , e come altri parametri la prima e la seconda data a cui fare riferimento... con l'if RISULTATO < 0 andiamo poi a colorare il testo di rosso se il valore della differenza è negativo o nero se è positivo.

vedo che hai cambiato il label che avevo messo io, non capisco come tu non possa aver capito il fatto che avevo messo d1 e d2 solo come esempio...

se hai ancora bisogno... facci sapere


-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

ruby18 Profilo | Newbie

cosa scrivo al posto di d1????
se la data me la prende dal date time picker????
sono alle prime armi..... scusate.....
aiutatemi

Lanello Profilo | Senior Member

allora...

mettiamo che nel tuo form tu abbia un datetimepicker chiamato "pippo" che riporta la data di scadenza della mia patente

d1=pippo.value

e che tu voglia sapere quante saranno le patenti scadute entro la data xx/xx/xxxx che imposti nel 2° datetimepicker chiamato "pluto"

d2=pluto.value

poi metti un bottone che si chiama "btn_controlla" per avviare il controllo...

all'evento "click" del bottone metterai il seguente codice

If DateDiff(DateInterval.Day, d1, d2) < 0 Then Label1.ForeColor = Color.Red Else Label1.ForeColor = Color.Black End If

vediamo se ora son riuscito a fartelo capire...


ps: se invece che con pluto.. lo vuoi controllare con la data odierna.. per sapere "ad oggi" quante sono le patenti scadute...
d2=now

ps2: è tutto codice che ho scritto "al volo" senza provarlo in vb.net, magari mi sbaglio con l'if... se mettendo una data "scaduta" non ti da il testo in rosso, inverti d1 e d2 nella funzione datediff , vabbè ma questi sono altri problemi ...

facci sapere

-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

Lanello Profilo | Senior Member

oooooppsss

mi sono appena accorto che stiamo parlando di vb6 e non di vb.net

che mito che sono

scusami!!!

ecco il codice "tradotto" in vb6 (come forse noterai cambia solo il primo parametro della funzione datediff

Dim d1, d2 As Date d1 = DTPicker1.Value d2 = DTPicker2.Value If DateDiff("d", d1, d2) < 0 Then Label1.ForeColor = &HFF& 'rosso Else Label1.ForeColor = &H0& 'nero End If



-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

ruby18 Profilo | Newbie

capito...
però io volevo ke il tutto avvenisse quando io scelgo la data dal datetimepicker, e non associandolo a un button.
non posso associare il codice all'evento change del dtp?
altrimenti posso fare cio in una casella di testo dove la data la inserisco manualmente?

ruby18 Profilo | Newbie

sto sviluppando in vb.net

Lanello Profilo | Senior Member

ok.. allora hai scritto nella stanza del visual studio 6, è per quello che ti ho tradotto tutto in vb6

certo che puoi associare il tutto all'evento valuechanged del datetimepicker non c'è nessun problema!

-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

Lanello Profilo | Senior Member


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra





-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

ruby18 Profilo | Newbie

ti ringrazio davvero tanto,
ma non mi funziona!
non riesco a capire il motivo????
Private Sub ins_ScadenzaPatente_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ins_ScadenzaPatente.ValueChanged
ins_ScadenzaPatente.Format = DateTimePickerFormat.Custom
ins_ScadenzaPatente.CustomFormat = "dd/MM/yyyy"
Dim d1, d2 As Date
d1 = ins_ScadenzaPatente.Value
d2 = Now
If DateDiff(DateInterval.Day, d1, d2) < 0 Then
ins_ScadenzaPatente.ForeColor = Color.Red
Else
ins_ScadenzaPatente.ForeColor = Color.Blue
End If
End Sub

ruby18 Profilo | Newbie

ho provato a creare una nuova applicazione vb.net mettendo dentro solo un datetime picker ma non funziona!

Lanello Profilo | Senior Member

vedi... alla fine abbiamo trovato il bandolo della matassa...

ho fatto anche io adesso un progetto nuovo con un solo datetimepicker e mi sono accorto solo ora che il controllo datetimepicker NON permette di cambiare il colore del testo della data, ma soltanto di cambiare i colori del calendario che si apre quando vai a selezionarla.

quindi NON è possibile cambiare il colore del testo del datetimepicker.

ti consiglio di mettere o un piccolo LABEL o un picturebox accanto al datetimepicker e di cambiare il colore a quello in base al risultato del datediff...


316x127 15Kb


con questo codice...

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

avrà questo comportamento... (considerando che NOW=17/04/2008)


315x123 17Kb


o questo


310x125 17Kb




-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

ruby18 Profilo | Newbie

Grazie mille........funziona benissimo
ultima domanda.
se volessi invece da una textbox, inserire una data manualmente, però con già una maschera di input __/__/____, posso applicare il sistema del cambiamento di colore del testo?????

Lanello Profilo | Senior Member

si si, senza prolemi.

puoi utilizzare TUTTI i controlli che nelle proprietà hanno "ForeColor"

se adesso ti funziona fammi l'ultimo piacere ;) accetta la risposta sul forum

-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

ruby18 Profilo | Newbie

volevo sapere come impostare il codice per la textbox

Lanello Profilo | Senior Member

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra






-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

ruby18 Profilo | Newbie

ho inserito il codice, però anche se scrivo una data inferiore a oggi me la scrive in verde, sembra non fare il controllo.

ruby18 Profilo | Newbie

va benissimo avevo sbagliato una stringa.
come faccio a inserire una maschera di input ad esempio __/__/____?

Lanello Profilo | Senior Member

basta che invece che una textbox usi una MASKEDtextbox ;)

il resto è tutto uguale

-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

ruby18 Profilo | Newbie

cioe????

ruby18 Profilo | Newbie

ho cercato in internet ma MASKEDtextbox non è disponibile in vb.net 2003, purtroppo utilizzo quella versione, sai x caso qualche trucco come importare il file ocx?

ruby18 Profilo | Newbie

maskedit inserita dai componenti aggiuntivi.

ruby18 Profilo | Newbie

ho inserito il seguente codice ma non fa il controllo data

Private Sub ins_ScadenzaPatenteADR_Change(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ins_ScadenzaPatenteADR.Change
ins_ScadenzaPatenteADR.Mask = " ##/##/####"
Dim d1, d2 As Date
'convertire il testo in data
d1 = CDate(ins_ScadenzaPatenteADR.Text)
d2 = Now
If DateDiff(DateInterval.Day, d1, d2) > 0 Then
ins_ScadenzaPatenteADR.ForeColor = Color.Red
Else
ins_ScadenzaPatenteADR.ForeColor = Color.Black
End If
End Sub

End Class
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5