Gambas-it

Gambas3 => Programmazione => Topic aperto da: naderit - 06 Maggio 2017, 20:02:00

Titolo: [RISOLTO]formattazione data
Inserito da: naderit - 06 Maggio 2017, 20:02:00
Ciao a tutti, il componente maskbox con proprietà impostata su 99/99/9999 viene gestita la data, usando gli eventi:

Codice: [Seleziona]
Public Sub MaskBox1_GotFocus()
  MaskBox1.Text = ""
  MaskBox1.Pos = 0
End

Public Sub MaskBox1_LostFocus()
Dim a1 As String
a1 = CDate(Replace(MaskBox1.Text, " ", "0"))
Print a1
Print Format(CDate(a1), "dd/mm/yyyy")
MaskBox1.Text = a1
End
   
e posso gestire l'inserimento dell'anno a due cifre.
il problema e che non riesco a formattare la data in gg/mm/aaaa, ovvero la data che inserisco nella maskbox viene riconosciuta sempre come mm/gg/aaaa.
utilizzando il componente Valuebox viene restituita la data gg/mm/aaaa ma non riesco a gestire l'inserimento dell'anno a due cifre.
dove sbaglio?
 
Titolo: Re:formattazione data
Inserito da: Gianluigi - 06 Maggio 2017, 22:45:38
Devi formattare Mask 00/00/0000 e...
Codice: [Seleziona]
MaskBox1.Text = Format(Date(Now), gb.ShortDate)

 :ciao:

P.S. Print è come Str non localizza

Dimenticavo: Se invece vuoi l'anno a due cifre...
Codice: [Seleziona]
  MaskBox1.Text = Format(Date(Now), "dd/mm/yy")
Titolo: Re:formattazione data
Inserito da: naderit - 07 Maggio 2017, 13:00:51
grazie Gianluigi, ma, mi sono spiegato male:
- utilizzo una maskbox per inserire delle date ( utilizzo la maschera "99/99/9999" per visualizzare solo "  /  /    " se uso tutti zero viene visualizzato "00/00/0000") 
- con evento gotfocus azzero il campo e posiziono il cursore all'inizio
- con evento lostfocus aggiungo gli zeri in quanto se scrivo 10/02/15 mi visualizza 10/2/15 e mi segala errore infine corregge la data con anno a 4 cifre
Codice: [Seleziona]
Dim a1 As String
a1 = CDate(Replace(MaskBox1.Text, " ", "0"))
MaskBox1.Text = a1
Print MaskBox1.Text
End
il print mi serve solo per vedere la data visualizzata
problema:
se per ipotesi inserisco 10/02/15 mi restituisce 10/02/2015 ma se inserisco 31/12/15 mi da errore in quanto la maskbox come mese prende 31 e non 12 ( la cosa è utile per avere un controllo immediato sulla data ) se ovviamente digito prima il mese e poi il giorno fila tutto giusto, e come se non prendesse il formato data di sistema, può essere?
 :ciao:
Titolo: Re:formattazione data
Inserito da: Gianluigi - 07 Maggio 2017, 14:43:44
Io MaskBox non l'ho mai usato, ma so che se vuoi usarlo per le date in locale devi impostare la maschera con gli zero altrimenti si posiziona in formato internazionale, vale a dire Mese/Giorno/Anno.

Ti allego l'esempio di prova.

 :ciao:
Titolo: Re:formattazione data
Inserito da: vuott - 07 Maggio 2017, 14:50:50
se inserisco 31/12/15 mi da errore in quanto la maskbox come mese prende 31 e non 12
Se io inserisco nella MaskBox la data 31/12/15, e poi, premendo ad esempio un Button, mostro con Print la data nella console, non ottengo errore, e la data viene mostrata identica a quella inserita (gg/mm/aa).

E', invece, la funzione CDate( ) a sollevare l'errore, in quanto essa non tiene conto della localizzazione corrente.

Titolo: Re:formattazione data
Inserito da: Gianluigi - 07 Maggio 2017, 15:11:53
Usare la maschere 00 oppure 99 non è esattamente la stessa cosa, infatti nel secondo caso gli zeri ante numero spariscono, ma è vero quanto dice vuott e infatti io ti avevo postato del codice con Date e non CDate.
Comunque dovendo in entrambi i casi gestire l'input dell'utente puoi benissimo continuare ad usare 99 ma all'utente dovrai specificare le cifre da digitare altrimenti sai che bordello.
Titolo: Re:formattazione data
Inserito da: tornu - 08 Maggio 2017, 23:34:50
Prova ad usare una DateBox con proprietà Mode settata su DateOnly,
io le uso regolarmente è non ho nessun tipo di problema compresa la gestione
delle barre di separazione giorno, mese e anno.
Titolo: Re:formattazione data
Inserito da: naderit - 10 Maggio 2017, 21:35:38
ciao, visto solo ora i post....scusate ma mi sono fissato su un problema che può essere banale o insignificante ma ai fini pratici può essere utile per l'inserimento dei dati.
Gianluigi ho provato il tuo esempio: funziona, ma  se inserisco 10/02/17 non trasforma in 10/02/2017 questo per me è importante quando dovrò salvare la data in un data base ( spero di aver risposto anche a vuott si è vero che se non utilizzo Cdate stampo il valore della maskbox )
Tornu una datebox e uguale o simile ad una valuebox? in tal caso se nella proprietà Type seleziono Date viene visualizzato 00/00/0000 e se inserisco 10/02/17 viene visualizzato 10/02/1700.

Titolo: Re:formattazione data
Inserito da: Gianluigi - 10 Maggio 2017, 21:50:35
E facendo...
Codice: [Seleziona]
Public Sub MaskBox1_LostFocus()
  Print Format(Val(MaskBox1.Text), "dd/mm/yyyy")
End

non ti va bene?

 :ciao:
Titolo: Re:formattazione data
Inserito da: naderit - 10 Maggio 2017, 22:07:56
ora provo, ma avrei quasi risolto con.....
Codice: [Seleziona]
Public Sub MaskBox1_LostFocus()
  Dim a1 As String
  Dim a2 As String
 
  a1 = Replace(MaskBox1.Text, " ", "0")
  a2 = Month(a1) & "/" & Day(a1) & "/" & Year(a1)
  MaskBox1.Text = a2
  Print a2
End
;D
Titolo: Re:formattazione data
Inserito da: naderit - 10 Maggio 2017, 22:32:47
ottimo Gianluigi, grazie, non avevo pensato ad usare Val ... ho risolto
Codice: [Seleziona]
Public Sub MaskBox1_LostFocus()
  Dim a1 As String
 
  a1 = Replace(MaskBox1.Text, " ", "0")
  MaskBox1.Text = Format(Val(a1), "dd/mm/yyyy")
 
  Print MaskBox1.Text
End

in questo modo se inserisco 10/02/17 mi trasforma 10/02/2015 come pure se inserisco 31/12/16 non da errore e stampa 31/12/2016
ottimo  :ciao:
allego esempio