Gambas-it

Gambas3 => Programmazione => Topic aperto da: Franco_da_vc - 25 Aprile 2017, 18:47:00

Titolo: [Risolto] Come mai il campo descrizione non prende il focus???
Inserito da: Franco_da_vc - 25 Aprile 2017, 18:47:00
Ho scritto una porzione di codice che mi da un po' di grattacapi, il guaio è che non riesco a capire cosa non gira, perché per me dovrebbe essere quella l'esatta codifica che avrei dovuto scrivere.

Alura, il codice è il seguente
Codice: [Seleziona]
Public Sub ListLavori_Select()

  pos3 = ListLavori.Index
  If pos3 = 0
    sw_altro = True
    If FMain.tipoBll - 1 = 2
      TextPersona.SetFocus
      Endif
    TextDescr.SetFocus()
    INS_PREZZO(0)
    Else
    descr$ = lavori$[pos3]
    TextDescr.Text = descr$
    prezzoUnit = prezzoVis[pos3]
    INS_PREZZO(1)
    Endif
  ListCapi.Enabled = False
  ButtonInsert.Background = &FF0000
  ButtonInsert.Enabled = False
  ButtonCancel.Background = &FF0000
  ButtonCancel.Enabled = False
  ButtonConf.Background = &00FF00
  ButtonConf.Enabled = True

End

Mi vorrei focalizzare sul TextDescr.SetFocus() secondo quanto avevo capito, arrivato a questa istruzione, il programma avrebbe dovuto fermarsi e far partire un prompt nell'oggetto textdescr appartenente alla classe TextBox ed uscirsene tramite un carattere di enter o di tab (definiti in una seconda sub).

Questo però non avviene, o meglio non avviene più, infatti oggi ho pulito il codice da righe del precedente programma (tra l'altro tutte commentate) da cui sto traducendo questo e.... chissà cosa ho cancellato, ha smesso di funzionare come io credevo, ho provato ad arzigogolare sul listato, ma non ci ho cavato il ragno dal buco.

 :hard: :hard: :hard:

Qualcuno sa darmi una mano?

P.S.: Appena risolta questa problematica, ne ho una seconda sempre inerente al brano di codice che ho riportato, ma ora non ne menziono per non essere troppo pedante e non mettere troppa carne al fuoco.

Grazie a tutti, Ciao.
Titolo: Re:Ma sarà giusto o no questo codice??? 1/2
Inserito da: vuott - 26 Aprile 2017, 00:48:10
Mi vorrei focalizzare sul TextDescr.SetFocus() secondo quanto avevo capito, arrivato a questa istruzione, il programma avrebbe dovuto fermarsi e far partire un prompt nell'oggetto textdescr appartenente alla classe TextBox

Quale sarebbe il comando che fa partire il prompt nell'oggetto textdescr  ? Forse la funzione INS_PREZZO( ) ? E quale è il codice da essa contenuto ?
Titolo: Re:Ma sarà giusto o no questo codice??? 1/2
Inserito da: Franco_da_vc - 26 Aprile 2017, 08:48:37
Ciao Vuott e grazie,

la funzione INS_PREZZO() contiene un po' di codice che interagisce sul prezzo che viene inserito tramite ValuePrezzoU.SetFocus oppure che viene preso in diretta da prezzoUnit secondo come viene pilotato il programma; similmente al primo caso (ValuePrezzoU.SetFocus) pensavo che l'istruzione TextDescr.SetFocus provocasse l'input del della descrizione lavoro.

Ciao
Titolo: Re:Ma sarà giusto o no questo codice??? 1/2
Inserito da: Gianluigi - 26 Aprile 2017, 12:22:21
Non so se ho compreso il problema ma guarda questo esempio se può aiutarti:
(Una finestra con due textbox e un pulsante)
Codice: [Seleziona]
' Gambas class file

Public Sub ListLavori_Select()
 
  ' pos3 = ListLavori.Index
  ' If pos3 = 0
  '   sw_altro = True
  '   If FMain.tipoBll - 1 = 2
  '     TextPersona.SetFocus
  '   Endif
  '   TextDescr.SetFocus()
  '   INS_PREZZO(0)
  ' Else
  '   descr$ = lavori$[pos3]
  '   TextDescr.Text = descr$
  '   prezzoUnit = prezzoVis[pos3]
  '   INS_PREZZO(1)
  ' Endif
  ' ListCapi.Enabled = False
  ' ButtonInsert.Background = &FF0000
  ' ButtonInsert.Enabled = False
  ' ButtonCancel.Background = &FF0000
  ' ButtonCancel.Enabled = False
  ' ButtonConf.Background = &00FF00
  ' ButtonConf.Enabled = True
 
  TextDescr.SetFocus()
 
End

Public Sub TextDescr_GotFocus()
 
  Message.Info("Mi hai dato fuoco")
  ' se non esco il prompt rimane bloccato!
  TextPippo.SetFocus()
 
End

Public Sub Button1_Click()

  ListLavori_Select()

End

Prova a entrare in TextDescr sia da TextPippo che dal pulsante commentando TextPippo.SetFocus()

 :ciao:
Titolo: Re:Ma sarà giusto o no questo codice??? 1/2
Inserito da: Franco_da_vc - 27 Aprile 2017, 16:36:02
Grande Gianluigi e grazie,

comunque ti tedio ancora.... il mio listato differiva dal tuo per la Public Sub TextDescr_GotFocus() che hai aggiunto e per l'istruzione TextDescr.SetFocus() in fondo alla Public Sub ListLavori_Select();

Ho provato ad aggiungere in primis la Public Sub TextDescr_GotFocus() , ma non ho ottenuto miglioramenti, ho aggiunto invece l'istruzione in fondo alla alla sub originale ed anche senza la funzione aggiunta tutto e tornato (quasi magicamente) a funzionare, ma come mai?
Se in quella posizione l'istruzione agisce dovrebbe agire anche nella posizione ove l'ho inserita io.... in effetti la sequenza degli input che si susseguono mi fa pensare che sia la prima l'istruzione che interagisce, ma allora perché ho dovuto inserire la seconda istruzione simile?

In ogni caso inserisco il risolto ed entro breve inserirò la seconda problematica.

Ciao.
Titolo: Re:[Risolto] Ma sarà giusto o no questo codice??? 1/2
Inserito da: Gianluigi - 27 Aprile 2017, 17:13:31
Bene, sono contento che tu abbia risolto anche se non ho capito come.   :D

Sei stato tu nel primo post che ci chiedevi di focalizzarci proprio su TextDesc.SetFocus() istruzione che faceva partire un prompt.
Ora se tu dai il focus a qualcosa e ti aspetti una risposta mi sembra logico che la risposta ti arrivi da GotFocus oppure mi sono perso qualcosa del ragionamento, cosa peraltro molto facile.  ;D

Forse nei post converrebbe evitare parole che possono essere interpretate in modi differenti (es. prompt) che io in un programma grafico associo a finestre di input o comunque di dialogo in generale.

Per concludere normalmente il focus ad altro controllo si da sempre alla fine del codice.

 :ciao:
Titolo: Re:[Risolto] Ma sarà giusto o no questo codice??? 1/2
Inserito da: Franco_da_vc - 27 Aprile 2017, 21:41:37
Per concludere normalmente il focus ad altro controllo si da sempre alla fine del codice.

Mmmh! forse ho capito, al momento della partenza della Public Sub ListLavori_Select() il programma è in effetti focalizzato sulla lista dei lavori da scegliere e quindi ciò verifica a pieno la tua ultima frase.

In ogni caso ti ringrazio ancora.

Caio