Autore Topic: [RISOLTO] Comportamento anomalo di una IF  (Letto 1035 volte)

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
[RISOLTO] Comportamento anomalo di una IF
« il: 26 Gennaio 2024, 16:30:29 »
Ho un comportamento anomalo che non riesco a capire in questo codice:

Codice: [Seleziona]
      Select Case FMain.TipoBll
        Case 1
          If PosLavori = 0 Then
            ValuePrezzoUNorm.SetFocus
          Endif
          ButtonConf.Background = &00FF00
          ButtonConf.Enabled = True
          ButtonConf.SetFocus
        Case 2
          TextScontrNum.SetFocus
        Case 3
          TextCliente.SetFocus
      End Select

FMain.TipoBll = 1 e PosLavori = 0, il programma esegue giustamente le prime tre linee ed entra nell'IF dove trova l'istruzione ValuePrezzoUNorm.SetFocus che non so se viene eseguita, il fatto è che non avviene il salto alla SUB che controlla ValuePrezzoUNorm descritta nel form con l'attributo Currency; il programma si limita ad eseguire le tre linee sotto all'IF (quelle con ButtonConf) e quindi esce dalla via sbagliata.
E' però strano che in altre parti del listato l'espressione ValuePrezzoUNorm.SetFocus funziona correttamente.

E' già successo anche a voi un fatto analogo e come l'avete risolto?
« Ultima modifica: 27 Gennaio 2024, 20:39:28 da Franco_da_vc »
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Comportamento anomalo di una IF
« Risposta #1 il: 27 Gennaio 2024, 11:21:40 »
 
Citazione
Case 1
          If PosLavori = 0 Then
            ValuePrezzoUNorm.SetFocus
          Endif
          ButtonConf.Background = &00FF00
          ButtonConf.Enabled = True
          ButtonConf.SetFocus

Come è possibile dare due SetFocus differenti nella stessa istruzione?
Prova a inserire uno Stop nel codice e a vedere/seguire il comportamento...
Eventualmente cambia l'avvio della routine setfocus su altro
Vedi se inserisci un Wait e funziona, forza la routine chiamandola direttamente ecc.

 :ciao:
« Ultima modifica: 27 Gennaio 2024, 11:25:32 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Comportamento anomalo di una IF
« Risposta #2 il: 27 Gennaio 2024, 11:33:10 »
... forza la routine chiamandola direttamente ecc.

La routine che viene chiamata da SetFocus la crei privata e la chiami sia da SetFocus che direttamente dal codice senza passare da SetFocus

Spero di essermi spiegato, naturalmente sempre salvo aver capito il problema  :)

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

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re:Comportamento anomalo di una IF
« Risposta #3 il: 27 Gennaio 2024, 11:48:51 »
 
Citazione
Case 1
          If PosLavori = 0 Then
            ValuePrezzoUNorm.SetFocus
          Endif
          ButtonConf.Background = &00FF00
          ButtonConf.Enabled = True
          ButtonConf.SetFocus

Come è possibile dare due SetFocus differenti nella stessa istruzione?
Prova a inserire uno Stop nel codice e a vedere/seguire il comportamento...
Eventualmente cambia l'avvio della routine setfocus su altro
Vedi se inserisci un Wait e funziona, forza la routine chiamandola direttamente ecc.

 :ciao:

Il ragionamento che avevo impostato era: dopo essere entra nel Case 1 se PosLavori è uguale a 0 il programma deve eseguire il primo SetFocus, mentre per valori di PosLavori diversi si sarebbe passato all'esecuzione delle linee sotto la IF incontrando il secondo SetFocus ed agendo di conseguenza.

Succede che per PosLavori=0 viene eseguita correttamente la IF, ma il controllo non esce dal CASE (come io pensavo) e continua nelle righe sottostanti andando ad eseguire il secondo SetFocus; in effetti però, non ho inserito il Wait, pensi che questo possa essere il problema.

Comenque ti ringrazio Gianluigi, sei sempre solerte e proattivo come tuo solito.
« Ultima modifica: 27 Gennaio 2024, 11:52:21 da Franco_da_vc »
Bye by Afo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Comportamento anomalo di una IF
« Risposta #4 il: 27 Gennaio 2024, 11:54:58 »
Il ragionamento che avevo impostato era: dopo essere entra nel Case 1 se PosLavori è uguale a 0 il programma deve eseguire il primo SetFocus, mentre per valori di PosLavori diversi si sarebbe passato all'esecuzione delle linee sotto la IF incontrando il secondo SetFocus ed agendo di conseguenza.

Succede che per PosLavori=0 viene eseguita correttamente la IF, ma il controllo non esce dal CASE (come io pensavo) e continua nelle righe sottostanti andando ad eseguire il secondo SetFocus

Quello è il logico comportamento, in questi casi le strade possono essere:
Inserire un Return subito dopo il primo setfocus
oppure
Se il codice prosegue dopo i case usare  If con Else

 :ciao:
« Ultima modifica: 27 Gennaio 2024, 11:55:57 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Comportamento anomalo di una IF
« Risposta #5 il: 27 Gennaio 2024, 12:03:42 »

Succede che per PosLavori=0 viene eseguita correttamente la IF, ma il controllo non esce dal CASE (come io pensavo) e continua nelle righe sottostanti andando ad eseguire il secondo SetFocus; in effetti però, non ho inserito il Wait, pensi che questo possa essere il problema.

Comenque ti ringrazio Gianluigi, sei sempre solerte e proattivo come tuo solito.

Prego  :)

Non usare Wait, se ti serve solo una routine usa ELSE, se ti servono entrambe le routine, spostale come suggerito sopra in routine private da richiamare secondo necessità.

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

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Comportamento anomalo di una IF
« Risposta #6 il: 27 Gennaio 2024, 14:08:32 »
Ciao Franco,

mi scuso, ma non ho fatto caso che lanci l'evento SetFocus per un pulsante.
Ma non tutti i controlli hanno l'evento SetFocus ad esempio il Button non lo ha.


Visto che ho fatto confusione, ho pensato di allegare un esempio, può essere utile?
« Ultima modifica: 27 Gennaio 2024, 14:57:55 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re:Comportamento anomalo di una IF
« Risposta #7 il: 27 Gennaio 2024, 20:38:32 »
Ciao Franco,

mi scuso, ma non ho fatto caso che lanci l'evento SetFocus per un pulsante.
Ma non tutti i controlli hanno l'evento SetFocus ad esempio il Button non lo ha.


Visto che ho fatto confusione, ho pensato di allegare un esempio, può essere utile?

Infatti la tua soluzione funziona, ho implementato la soluzione IF ... THEN ... Else; in verita una struttura del genere l'avevo scritta anch'io, ma devo aver scritto qualche cavolata perché non mi funzionava affatto.

Ti ringrazio Gianluigi
Bye by Afo