Autore Topic: Message prepotente!  (Letto 3030 volte)

Offline dregi

  • Gambero
  • **
  • Post: 85
  • Non possum tuis usque tandem abutere patientiae?
    • Mostra profilo
Message prepotente!
« il: 10 Settembre 2019, 12:23:28 »
Codice: [Seleziona]
Public Sub txtIndirizzo_LostFocus()
txt = txtIndirizzo.Text

If Len(txt) > 2 Then
  If f.TrovaNum(txt) = False Then
    txt = txt & " "
    Message.Info("Manca il numero civico!", "OK")
    txtIndirizzo.Text = txt
    txtIndirizzo.Pos = Len(txt)
    txtIndirizzo.SetFocus 
  Endif
Endif
End

Il codice sopra esegue solo la riga txtIndirizzo.SetFocus dopo Message.Info. Se commento Message.Info invece esegue tutto il codice. Qualcuno mi sa dire perchè?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Message prepotente!
« Risposta #1 il: 10 Settembre 2019, 12:43:33 »
Che Oggetto è "txtIndirizzo" ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dregi

  • Gambero
  • **
  • Post: 85
  • Non possum tuis usque tandem abutere patientiae?
    • Mostra profilo
Re:Message prepotente!
« Risposta #2 il: 10 Settembre 2019, 12:55:53 »
E' un TextBox

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Message prepotente!
« Risposta #3 il: 10 Settembre 2019, 15:24:24 »
A me viene sollevato un errore (vedi immagine allegata).
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Message prepotente!
« Risposta #4 il: 10 Settembre 2019, 15:25:34 »
Penso, ma non ne sono certo, si tratti di un bug.
Si comporta così perché usi le librerie gtk, con le qt darebbe direttamente errore (vuott dixit).
Ho visto che per qualche ragione a me sconosciuta l'evento si ripete due volte, forse è causato da quello.
Ti conviene spostare i controlli in un'unica routine che azioni al momento di inviare i dati al database, così sei tranquillo che qualunque libreria usi funzionerà.
Altrimenti, visto che ho comunicato la questione, puoi attendere un'eventuale rara risposta rapida.
« Ultima modifica: 10 Settembre 2019, 15:26:14 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline dregi

  • Gambero
  • **
  • Post: 85
  • Non possum tuis usque tandem abutere patientiae?
    • Mostra profilo
Re:Message prepotente!
« Risposta #5 il: 10 Settembre 2019, 15:37:04 »
attendere un'eventuale rara risposta rapida.

 :)

questa è proprio spassosa! :)

Offline dregi

  • Gambero
  • **
  • Post: 85
  • Non possum tuis usque tandem abutere patientiae?
    • Mostra profilo
Re:Message prepotente!
« Risposta #6 il: 10 Settembre 2019, 15:42:12 »
Visto che ci sono e l'obiettivo era quello di impedire la digitazione di lettere in un textbox per numeri, in VB6 con keyascii=0 si annullava il tasto premuto e sul textbox non veniva visualizzato nulla, è possibile avere qualcosa di analogo in gambas?

Offline dregi

  • Gambero
  • **
  • Post: 85
  • Non possum tuis usque tandem abutere patientiae?
    • Mostra profilo
Re:Message prepotente!
« Risposta #7 il: 10 Settembre 2019, 15:54:37 »
Ho risoltoooooo, basta spostarlo dopo le righe di codice di cui si vuole l'esecuzione.
Codice: [Seleziona]
txtIndirizzo.Text = txt
    txtIndirizzo.Pos = Len(txt)
    txtIndirizzo.SetFocus
    f.Suona("beep.wav")
    Message.Info("Manca il numero civico!", "OK")
« Ultima modifica: 10 Settembre 2019, 15:55:08 da dregi »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Message prepotente!
« Risposta #8 il: 10 Settembre 2019, 19:22:58 »
Visto che ci sono e l'obiettivo era quello di impedire la digitazione di lettere in un textbox per numeri, in VB6 con keyascii=0 si annullava il tasto premuto e sul textbox non veniva visualizzato nulla, è possibile avere qualcosa di analogo in gambas?

Io userei l'Oggetto ValueBox !

Ad ogni modo, volendo usare il TextBox, si può proporre un codice come il seguente:
Codice: [Seleziona]
Public Sub TextBox1_Change()

  Dim i As Integer
   
  For i = 1 To Len(TextBox1.Text)
    If IsLetter(Mid(TextBox1.Text, i, 1)) Then
      Mid(TextBox1.Text, i, 1) = Null
      TextBox1.Pos = i - 1
    Endif
  Next
   
End
« Ultima modifica: 10 Settembre 2019, 19:36:24 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:Message prepotente!
« Risposta #9 il: 13 Settembre 2019, 12:10:08 »
si, anche io metterei il numero civico in un altro "field".
In questo modo puoi evitare di fare il parse dell'intero indirizzo, che potrebbe avere anche "falsi positivi" tipo VIA 20 SETTEMBRE 32.

in ogni caso, come dici tu, se metti la generazione di una "azione" all'interno di un ciclo, ci puo' stare che venga ripetuta :D
se corri, morirai stanco (motto degli sniper)

Offline dregi

  • Gambero
  • **
  • Post: 85
  • Non possum tuis usque tandem abutere patientiae?
    • Mostra profilo
Re:Message prepotente!
« Risposta #10 il: 21 Settembre 2019, 17:33:44 »
Vuott, non uso il Valuebox perchè il contenuto non è formattabile:  1.550,30 mentre col textbox a livello di formattazione faccio quello che voglio. Comunque ispirandomi al tuo codice, ho risolto così:
Codice: [Seleziona]
Public Sub txtImporto_Change()
  Dim s As String
  s = txtImporto.Text
  If Len(s) > 0 Then
  If Not IsNumber(s) Then
    txtImporto.Text = ""
    f.suona("chord.wav")
  Endif
  Endif
End

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Message prepotente!
« Risposta #11 il: 21 Settembre 2019, 17:51:54 »
...ma con questa riga:
   
Codice: [Seleziona]
txtImporto.Text = ""
in caso di immissione di un carattere non numerico ti cancella tutti i numeri precedentemente immessi nel textbox !
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dregi

  • Gambero
  • **
  • Post: 85
  • Non possum tuis usque tandem abutere patientiae?
    • Mostra profilo
Re:Message prepotente!
« Risposta #12 il: 22 Settembre 2019, 00:27:34 »
Vero, hai ragione, anche se io presupponevo che l'utente solo inizialmente facesse l'errore di inserire testo in un textbox importo. Comunque, meglio il tuo codice.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Message prepotente!
« Risposta #13 il: 22 Settembre 2019, 00:30:36 »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Message prepotente!
« Risposta #14 il: 22 Settembre 2019, 19:06:18 »
Visto che ci sono e l'obiettivo era quello di impedire la digitazione di lettere in un textbox per numeri, in VB6 con keyascii=0 si annullava il tasto premuto e sul textbox non veniva visualizzato nulla, è possibile avere qualcosa di analogo in gambas?

Se l'obbiettivo è quello di avere una casella con numeri divisi per migliaia e per decimali e senza la € allora propongo qualcosa di simile:
Codice: [Seleziona]
Public Sub TextBox1_KeyPress()

  Dim iPos As Integer = TextBox1.Pos

  Select Case Key.Code
    Case Key.Left, Key.Right, Key.BackSpace, Key.Delete, Key.Enter, Key.Return, Key.Escape, Key.Home, Key.End, Key.Tab, Key.BackTab
      Return
  End Select

  Select Case Key.Text
    Case "0" To "9"
      Return
    Case ",", "."
      If iPos = 0 Then Stop Event
    Case Else
      Stop Event
  End Select

End

Public Sub TextBox1_LostFocus()

  If TextBox1.Text <> Format(Val(TextBox1.Text), "#,###.00") Then
    TextBox1.Text = Format(Val(TextBox1.Text), "#,###.00")
    Balloon.Delay = 4000
    Balloon.Warning("<b>Valore Riformattato</b>.\nControllane la correttezza", TextBox1)
    TextBox1.SetFocus()
    TextBox1.SelectAll()
  Endif

End
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro