Gambas-it

Gambas3 => Programmazione => Topic aperto da: Franco_da_vc - 26 Gennaio 2024, 16:30:29

Titolo: [RISOLTO] Comportamento anomalo di una IF
Inserito da: Franco_da_vc - 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?
Titolo: Re:Comportamento anomalo di una IF
Inserito da: Gianluigi - 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:
Titolo: Re:Comportamento anomalo di una IF
Inserito da: Gianluigi - 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:
Titolo: Re:Comportamento anomalo di una IF
Inserito da: Franco_da_vc - 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.
Titolo: Re:Comportamento anomalo di una IF
Inserito da: Gianluigi - 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:
Titolo: Re:Comportamento anomalo di una IF
Inserito da: Gianluigi - 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:
Titolo: Re:Comportamento anomalo di una IF
Inserito da: Gianluigi - 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?
Titolo: Re:Comportamento anomalo di una IF
Inserito da: Franco_da_vc - 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