Autore Topic: [Risolto] setfocus su vari controlli  (Letto 2320 volte)

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
[Risolto] setfocus su vari controlli
« il: 18 Maggio 2013, 09:51:55 »
salve,
ho una serie di controlli textbox,combobox,............textedit, in cui voglio immettere dei dati, da registrare in una tabella di database.
sarebbe opportuno poter passare in automatico il setfocus ai vari controlli  una volta eseguito l'imput  o fatta la giusta scelta (comboox).
la cosa è semplice per i textbox; i combobox invece, hanno il metodo setfocus(ma viene evidenziato solo iserendolo un ciclo con un wait, successivamente  non  rilascia il setfocus.
Qualcuno ha avuto lo stesso problema che si verifica sia con gambas 2 e/o 3.
grazie


« Ultima modifica: 22 Maggio 2013, 20:02:14 da giob1642 »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #1 il: 18 Maggio 2013, 14:05:14 »
ho una serie di controlli ..... in cui voglio immettere dei dati...
sarebbe opportuno poter passare in automatico il setfocus ai vari controlli  una volta eseguito l'imput  o fatta la giusta scelta (comboox).


Scusami, per capire: ma tu vuoi che, una volta effettuata l'immissione dei dati, sia impostato automaticamente il focus al controllo successivo ?
« Ultima modifica: 18 Maggio 2013, 18:39:52 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 simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #2 il: 18 Maggio 2013, 17:41:30 »
forse ho capito.... 8)

vorresti sapere come passare, con il tasto tab, da un elemento (list) del combobox a quello successivo

la soluzione non la so, ma almeno spero di aver fatto capire qualcosa a qualcunaltro :angel:
« Ultima modifica: 18 Maggio 2013, 17:43:22 da simo97 »
;D

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #3 il: 18 Maggio 2013, 20:59:20 »
si proprio cosi, e ciò premendo enter o return
giob1642
 

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #4 il: 18 Maggio 2013, 21:03:16 »
si proprio cosi, e ciò premendo enter o return

Scusa, ma è come ho interpretato io o come ha interpretato simo97 ?    :rolleyes:
« 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 giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #5 il: 19 Maggio 2013, 00:52:50 »
tips[1]=textbox
tips[2]=textbox
tips[3]=combobox
tips[4]=textbox
tips[5]=textbox
tips[6]=combobox
tips[7]=textbox
tips[8]=textbox

'gambas class file
PUBLIC np AS Integer
PUBLIC nh AS Integer

Punlic sub scrivi Rec
 DIM gt AS String
 DIM cat AS Object

     WHILE Pdl[np, 0] <> ""                ' tips[np].text può contenere anche un valore nel qual caso viene salta   
      cat = tips[np]
      gk = Object.Type(cat)

            nh = 0
                  SELECT CASE gk
                           CASE "ComboBox"
                                      tips[np].text = tips[np].List[0]
                                      tips[np].SetFocus
                                     WHILE tips[np].text = ""
                                               WAIT 0.001
                                      WEND
                                      nh = 1
 
                       CASE "TextBox"
                                  IF Pdl[np, 1] = "au" OR tips[np].text <> "" THEN
                                       nh = 1
                                 ELSE             
                                      tips[np].setfocus
                                      WAIT 0.001
                                ENDIF
             IF nh = 1 THEN INC np
 WEND 
end


PUBLIC SUB input_Keypress()
DIM ltext AS Variant
DIM ltag AS Variant
DIM Plen AS Integer


           IF Key.code = Key.enter OR Key.code = Key.return THEN
      '       
                     IF plen > 28 THEN
                          tips[np].text = ""
                          tips[np].setfocus
                     ELSE
                        nh = 1
                     ENDIF
      ' WEND
          'ELSE
         '    WAIT 0.001
          ' tips[np].setfocus
            '?????????????????????????????? qui c'e qualcosa che non funziona nè in gambas 2 e/o 3
          ENDIF
 END

nota l vari wait (pur se sporchi sono indispensabili )diversamente il progr non gira.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #6 il: 19 Maggio 2013, 01:24:46 »
Perdonami, ma per me è peggio che andar di notte: continuo a non capire.  :-\
« Ultima modifica: 19 Maggio 2013, 16:39:54 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 pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #7 il: 19 Maggio 2013, 03:28:17 »
         ' tips[np].setfocus

Su questa riga sarebbe banale rispondere che non funziona perche' e' un commento :) Comunque, a parte gli scherzi, nemmeno io ho capito cosa vorresti fare, imho con otto controlli si potrebbe ben fare un setfocus senza andare a cercare WAIT o cose simili, visto l'ordine dei controlli, forse basterebbe una condizione nel keypress della combobox? Ma, ripeto, sicuramente non ho capito.

Codice: [Seleziona]
If key.code = key.tab Then
  ' if combobox.text etc etc then
ValueBox1.SetFocus()
Stop Event
Endif    

Ripeto, non ho capito nemmeno a cosa serve questo (alla fine, la tua sub e' questa):

Codice: [Seleziona]
 IF Key.code = Key.enter OR Key.code = Key.return THEN
                     IF plen > 28 THEN
                          tips[np].text = ""
                          tips[np].setfocus
                     ELSE
                        nh = 1
                     ENDIF
 ENDIF
« Ultima modifica: 19 Maggio 2013, 03:31:07 da pastrank »

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #8 il: 19 Maggio 2013, 11:09:55 »
chiedo scusa,  effetivamente quanto postato è incomprensibille .
attualmente l'ho risolto e nei prossimi giorni publicherò il risultato.

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #9 il: 19 Maggio 2013, 19:58:06 »
L'idea è quella di costuire in runtime un gruppo di controlli che corrisponde  per es a:
1-tips[1]=textbox
2-tips[2]=textbox                                   (provincia)Pescara
3-tips[3]=combobox
4-tips[4]=textbox                                    05/19/2013
5-tips[5]=textbox                                    (comune) Popoli
6--tips[6]=combobox
7-tips[7]=textbox                                     324
8-tips[8]=textbox                                     19/2013 14:02:49.502
e successivamente riempirli  utilizzando un focus itinerante
tutti i controlli hanno delle proprietà particolari e ecome tali soggetti a filtri ;
nel caso in esame potremmo avere tips[1]..........autoincrement "au" e comme tale non va immesso.
                                                    tips[4].......... data apertura          sk "iv"   invisibile all'atto dell'imput
                                                    tips[7]...........id dell'operatore         "iv"   invisibile all'atto dell'imput
                                                    tips[8]...........data dell'imput           "iv"   invisibile all'atto dell'imput
può essere richiesto anche un input veloce  per es tips[2].tips[5].
i campi invisibili, ed un imput veloce vanno preparati prima di procedere all'input
i dati fissi input veloce od invisibili su  riportati   sono preparati prima dell'imput ed immessi in ogni record, operazione che immette anche auto increment.
certamente vi sarà necessita di verificare lunghezza stringhe,correttezza di un codice fiscale...............................
a questo punto possiamo scrivere la prima routine:
                                            'in fase di prepaarazione metto tutti gli oggetti tips[] in una matrice pdl[np,0], mente eventuali filtri si   
,================================================================================================================================================================
modo a non funziona in quanto non è facile uscire ed entrare nel ciclo
WHILE Pdl[np, 0] <> ""   
'=================================================================================================================================================================
'modo B evita il while e funziona
 IF Pdl[np, 0] <> "" THEN 
'===================================================================================================================================================================                 
      cat = tips[np]                           'in Pdl[np,1-2-3........]]
      gk = Object.Type(cat)

            nh = 0
                  SELECT CASE gk
                           CASE "ComboBox"
                                      tips[np].text = tips[np].List[0]
                                      tips[np].SetFocus
                                     WHILE tips[np].text = ""
                                            WAIT 0.001
'===================================================================================================================================================================                 
'IL ciclo while wend non viene interrotto da un set focus  pertanto o s'inserisce un wait altrimenti non è in grado di mostrare quello che ha fatto.
'===================================================================================================================================================================                 

                                      WEND
                                      nh = 1
 
                       CASE "TextBox"
                                  IF Pdl[np, 1] = "au" OR tips[np].text <> "" THEN                       
                                       nh = 1
                                 ELSE             
                                      tips[np].setfocus
                                      WAIT 0.001
                                ENDIF
             IF nh = 1 THEN INC np
 WEND 
'===================================================================================================================================================================                 
'nel caso del text box il ciclo dovrebbe lavorare su la rotine estenna tips_Keypress() ed almeno a me con il modo a non funziona.
l'aggiornamento utomatico del cicli while piu esterno fa che la riga  "IF Pdl[np, 1] = "au" OR tips[np].text <> "" THEN" vie aggiornata dopo il primo giro, quindi tutto "CASE "TextBox""  va riscitto 
'===================================================================================================================================================================                 
                      CASE "TextBox"
                                nk = 0
                                k = 0
                             WHILE ctk[np, k] <> ""
                                  IF ctk[np, k] = "iv" THEN nk = 1
                             INC k
                             WEND
                             IF Pdl[np, 1] = "au" OR nk = 1 THEN
                              nh = 1
                             ELSE
                            tips[np].setfocus
                             ENDIF
,================================================================================================================================================================
srttura dell parte fina giusta Modo B 
'=================================================================================================================================================================
                     CASE "blog"
                     CASE "label"
              END SELECT
     
      IF nh = 1 THEN
          INC np
          InputRecord()
      ENDIF
  ELSE
 Button2.visible = TRUE
ENDIF
'  WEND
END


PUBLIC SUB tips_Keypress()
DIM Plen AS Integer
           IF Key.code = Key.enter OR Key.code = Key.return THEN
                 plen = Len(tips[np].text)
                     IF plen > 8 THEN
                          tips[np].text = ""
                     ELSE
                        INC np
                        inputrecord()
                     ENDIF
          ENDIF
 END

Spero di essere stato sufficentemente chiaro diversamente fatemi sapere
giob1642

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #10 il: 19 Maggio 2013, 20:30:28 »
Spero di essere stato sufficentemente chiaro diversamente fatemi sapere

Apprezzo lo sforzo :), ma ho capito poco dal codice: riporto quindi ancora la mia impressione, e' possibile che per muoversi tra i controlli occorra aprire un while? Ci sono, come scrivi, 8 controlli, solo due combobox che sono piu' difficili a desetfocusare, e non capisco perche' consideri i valori generati dal programma tipo l'incremento o l'id operatore nel ciclo, se sono automatici.
In altre parole, non sarebbe piu' semplice passare da un controllo all'altro con il classico tab e prima controllare il valore inserito se e' corretto? Magari dormo soltanto, ma non riesco davvero a capire quando dici 'IL ciclo while wend non viene interrotto da un set focus  pertanto o s'inserisce un wait altrimenti non è in grado di mostrare quello che ha fatto..
Cioe', non capisco il motivo del while, davvero, ne perche' debba stare tutto all'interno, ma nemmeno ricordo di avere mai visto casi in cui l'immissione era fatta cosi'.

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #11 il: 20 Maggio 2013, 02:25:33 »
E' ovvio che in un prog. complesso che si appoggia ad un database con numerose  tabelle, avere una matrice di controlli che mi rapptresenta le varie tabelle,con i vari filtri  e che ha un suo modo d'essere gestito può agevolarmi il lavoro.
Forse si può fare con i tab, ma io preferisco usare keypress.

In un ciclo while qualunque spicchio di codice fai eseguire(per es  il setfocus)  non ferma il  procedere del ciclo while; per tale motivo è indispensabile inserire un wait; se invece devi richiamare una routine estena al whille (......_keypress) l'aggionamento automatico che gambas fa di while  crea casini.
se provi a far girare il mio prog senza wait vedrai che non funziona.

Un record generico può essere più o meno complesso, fare una realese una volta sola può essere utile ; cosi facendo inserisci  nel record vari dati comuni come ora ed id operatore od atro; pensa ad un imput particolare come le fatturazioni  per es gas ove hai gia le varie utenze ordinate  quindi sarebbe sufficiente inserire solo le letture ed è proprio quello che immette l'operatore, e ciò senza accorgersi che ha firmato il suo input  ha registrato l'ora della registrazioe....................................

prendo atto delle tue osservazioni e mi piacerebbe vedere come svilupperesti il tutto con  i tab,al momento non mi rendo conto quale sia la via migliore
giob1642

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #12 il: 20 Maggio 2013, 19:51:46 »
Forse si può fare con i tab, ma io preferisco usare keypress.

Aspetta, io sono a dire di usare il tasto TAB, non i tab "componente visuale". Alla fine, quello che mi chiedevo era solo perche' non usare il tasto tab come in tutti i programmi (l'inserimento dati e' sicuramente piu' veloce da tastiera), se il campo, sia esso textbox o combobox, e' ok, allora setta il focus sul successivo, se non lo e' annulla l'evento. Tutto qui. Poi, uno lo implementa come vuole, certo. Per esempio, se usi il lostfocus fai una cosa, se controlli quando premi il tab un'altra, etc etc

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #13 il: 21 Maggio 2013, 00:59:59 »
Sembra facile ma se guardi gb qt4 vedrai che gambas3 in qt4 non ammette il lostfocus e fare una routine diventa veramente un problema, perciò ho usato i wait; comunque grazie dei buoni consigli; c'è sempre da imparare.
Rammento che il modo da me usato si presta benissimo ad un gruppo di routine facilmente riutilizzabili
grazie di nuovo
giob1642

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: setfocus su vari controlli
« Risposta #14 il: 21 Maggio 2013, 23:49:42 »
Sembra facile ma se guardi gb qt4 vedrai che gambas3 in qt4 non ammette il lostfocus

Ma dove l'hai letto? Secondo me, non me ne volere, hai maturato nel tuo programma una bella confusione. Quando entri nella documentazione di Gambas, direttamente dall'hide di gambas del tuo programma, col tasto "F1", clicca in successione su Componenti 3.0 --> Qt4 --> TextBox/ComboBox (quale vuoi): fra gli eventi trovi elencato anche il LostFocus.
Potrai constatare personalmente che l'evento LostFocus continua ad esistere e gode di ottima salute. Posso confermartelo anche praticamente perchè nel mio ContabFam utilizzo molto l'evento LostFocus sin da quando ho scritto le prime istruzioni sotto Gambas2. Quando ho installato Gambas3, ho attivato la conversione automatica da G2 a G3 ed il mio programma continua a funzionare bene anche in G3.

Per risolvere i tuoi problemi ci sono varie possibilità. Dovresti però fermare un pò la stesura di codice, leggere alcuni argomenti sul Wiki del Forum come "Miscellania --> Assegnare più oggetti ad un gruppo" ed altrri che mi viene difficile segnalarti perchè non conosco le tue difficoltà, ma sono sicuro che tu, scorrendo i titoli dei vari argomenti, sarai benissimo in grado di individuare.
Rivisitando poi, con maggioire consapevolezza conoscitiva, il tuo programma, vedrai che troverai molto da cambiare e, sicuramente, in meglio.
 :ciao:
:ciao: