Gambas-it

Gambas3 => Programmazione => Topic aperto da: vigiot - 31 Gennaio 2018, 21:51:10

Titolo: [RISOLTO]SetFocus di un TextBox che non và
Inserito da: vigiot - 31 Gennaio 2018, 21:51:10
Salve altro discorso.
Dovendo controllare che siano stati inseriti i dati richiesti nelle singole TextBox ho provato:
Codice: [Seleziona]
' chiusura
Public Sub btn_admin_insert_Click()
Dim xx As TextBox
Dim rr As Boolean

  For Each xx In my_panel_1.Children
    If (IsNull(xx.Text) = True) Then
      With Balloon
        .Warning("Campo vuoto !!", xx, (xx.W / 2), xx.Y)
      End With
      rr = False
      Break
    Endif
    rr = True
  Next
 
  If rr Then
    my_win_admin.Close(2)
  Else
    xx.SetFocus
  Endif
End

Facendo prove il balloon appare dove dovrebbe apparire (nel TextBox "saltato")
però ... il SetFocus non funge ! >:(
chi sà il perché ?
cosa ho sbagliato ?

Grazie  :ciao: :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: Gianluigi - 31 Gennaio 2018, 22:34:38
A me invece non funzionava il baloon, nel senso che si mostrava a capocchia tranne che nel posto giusto.
Così funziona tutto (scusa se ho variato i nomi per renderlo più comprensibile ora che ti sei lanciato con l'inglese  ;D):
Codice: [Seleziona]
Public Sub Button1_Click()

  Dim hText As TextBox
  Dim bEmpty As Boolean

  For Each hText In Panel1.Children
    If (IsNull(hText.Text) = True) Then
      Print hText.Name
      With Balloon
        .Delay = 1500
        .Warning("Campo vuoto !!", hText)
      End With
      bEmpty = False
      Break
    Endif
    bEmpty = True
  Next

  If bEmpty Then
    'my_win_admin.Close(2)'
    Print "Chiudo finestra"
  Else
    hText.SetFocus
  Endif

End
Se tu fai la semplice prova tipo textbox2.setfocus funziona? Altrimenti è un problema di tema.

 :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vigiot - 01 Febbraio 2018, 09:45:07
Grazie per il tuo tempo Gianluigi  :-*
Nel frattempo ho provato con:
Codice: [Seleziona]
my_win_admin.SetFocus()
Niente !  :rolleyes:
Poi con :
Codice: [Seleziona]
my_win_admin.Activate()
ancora no ... >:(
Probabilmente, poiché il balloon ha un effetto "Top Level" una volta disattivato la finestra in cui appare rimane inattiva,
infatti se tu ci clicki sopra i textbox riceve il setfocus.
Quindi bisogna trovare il giusto comando per farlo da codice, visto che ".Ativate()" non funziona.

P.S. l'apparire a capocchia è un mio errore, la chiamata giusta è ".Warning("Campo vuoto !!", xx)", senza indicazioni X e Y

Sorry ... :-[
A presto  :ciao: :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: Gianluigi - 01 Febbraio 2018, 10:34:23
Grazie per il tuo tempo Gianluigi  :-*
Nel frattempo ho provato con:
Codice: [Seleziona]
my_win_admin.SetFocus()
Niente !  :rolleyes:
Poi con :
Codice: [Seleziona]
my_win_admin.Activate()
ancora no ... >:(
Probabilmente, poiché il balloon ha un effetto "Top Level" una volta disattivato la finestra in cui appare rimane inattiva,
infatti se tu ci clicki sopra i textbox riceve il setfocus.
Quindi bisogna trovare il giusto comando per farlo da codice, visto che ".Ativate()" non funziona.
A presto  :ciao: :ciao:
???
Citazione da: Gianluigi
Se tu fai la semplice prova tipo textbox2.setfocus funziona? Altrimenti è un problema di tema.

Non stavamo parlando del Focus alle TextBox  ???
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vigiot - 01 Febbraio 2018, 10:46:35
Si e no ... ;)
il SetFocus funziona nelle condizioni "normali", il problema sorge durante il ciclo di controllo...
Cerco di spiegarmi meglio ( almeno ci provo )
window in showModal
tutti i textbox in un pannello
un "bottone" con "Applica" ed uno con "Cancella"
Se selezioni "Applica" deve partire un ciclo con For Each .....
se tutti i campi sono completi Ok, diversamente Balloon e poi SetFocus sul controllo "orfano" ...
e qui ....

I miss the "know how" necessary to solve it  :-\ :-\
 :ciao: :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: Gianluigi - 01 Febbraio 2018, 11:05:11
Scusa ma per capirsi non è meglio fare un piccolo esempio pratico?  >:(
Ad esempio questo a me funziona e a te?
Altrimenti spiegati meglio.

 :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vigiot - 01 Febbraio 2018, 13:16:27
No.
Si comporta esattamente come il mio ...
il SetFocus al TextBox "Empty" lo riceve solo se attivi tu la finestra, non in automatico come vorrei che facesse.
Quello che intendo, dopo che è stato intercettato il "campo" nullo:
1) Balloon di avviso
2)Attivazione della finestra
3) SetFocus
Senza che sia necessario cliccare sulla finestra per attivarla ...  8)

Ciao  :ciao: :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: Gianluigi - 01 Febbraio 2018, 13:39:12
Per cambiare il tema, potresti installare qt4-qtconfig (QT Configuration), poi lo imposti su Cleanlooks facendo attenzione al font che sia normale (di default lo mette su Mediun Italic) e vedere se poi ti funziona.

 :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vigiot - 01 Febbraio 2018, 15:56:08
Il problema è proprio il Balloon !  :evil:
Se al posto del balloon usi un Message.Warning il resto funge !!
Quindi è sulla gestione del balloon che bisogna interrogarsi.  ??? ???
Prova anche nel tuo esempio ...

Grazie  :ciao: :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vuott - 01 Febbraio 2018, 20:23:09
A me così funziona:

Codice: [Seleziona]
Public Sub Button1_Click()

  Dim hText As TextBox

  For Each hText In Panel1.Children
   
    If (IsNull(hText.Text) = True) Then
      Print hText.Name
      With Balloon
        .Delay = 1500
        .Warning("Campo vuoto !!", hText)
      End With
      hText.SetFocus      '  <--------------------
      Break
    Endif

  Next

End
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vigiot - 01 Febbraio 2018, 21:06:24
Ancora No ...
Ricapitoliamo, passo, passo
1)Creo una finestra -> With my_win_admin = New Window As "win_admin"
2) aggiungo un panel -> With my_panel_1 = New Panel(my_win_admin)
     (sfondo trasparente)
3) bottoni -> With admin_btn_1 = New Button(my_win_admin) As "admin_btn1"
4) TextBox -> With admin_tb1 = New TextBox(my_panel_1) As "admin_tb1"
ecc. per altri TextBox ...
5) Label -> With admin_lab1 = New Label(my_win_admin)
ecc. uno per ogni TextBox
6) lancio la finestra con: i = my_win_admin.ShowModal()
attendo il bottone "Apply" se premuto :
Codice: [Seleziona]
Public Sub btn_admin_insert_Click()
Dim xx As TextBox
Dim rr As Boolean

  For Each xx In my_panel_1.Children
    If (IsNull(xx.Text) = True) Then
      With Balloon
        .Warning("Campo \n" & xx.Tag & "\n vuoto", xx)
        .Delay = 750
      End With
      'Message.Warning("Campo \n" & xx.Tag & "\n vuoto", "Ok")
      rr = False
      xx.SetFocus
      Break
    Endif
    rr = True
  Next
 
  If rr Then
    my_win_admin.Close(2)
  Else
    'my_win_admin.Activate()
    'xx.SetFocus
  Endif
End
Appare il balloon al posto giusto, ma quando "finisce" il suo ciclo, la finesta(my_win_admin) rimane inattiva
Solo cliccandoci dentro (alla finestra) quindi di fatto attivandola, il SetFocus fa il suo dovere.
Il mio desiderio era quello di veder attivata la finestra ed relativo SetFocus del TextBox incriminato, senza doverci cliccare.
Fine balloon finestra attiva.
Qualcosa non quadra, evidentemente manca qualcosa nel codice da me scritto, ma cosa ?
Se volete estrapolo il codice e lo posto in un esempio.
Grazie  :ciao: :ciao:

Titolo: Re:SetFocus di un TextBox che non và
Inserito da: Gianluigi - 01 Febbraio 2018, 22:10:50
Scusa tanto ma il progetto esemplificativo da me postato solo a te non funziona.
Lo hai capito o no che a noi funziona?
Hai provato a installare QT Configuration e a cambiare il tema?
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vigiot - 01 Febbraio 2018, 23:06:05
 ???
Citazione
Hai provato a installare QT Configuration e a cambiare il tema?
Scusa, ma perché il tema ?
Sono ignorate, a cosa serve cambiarlo ?
C'entra qualcosa con il comportamento del balloon ?
E poi sapete spiegarmi perché se invece di richiamare un Balloon richiamo un MessageBox il tutto funziona come voglio io ?
Fatemi sapere ...
 :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vuott - 01 Febbraio 2018, 23:17:59
Ricapitoliamo, passo, passo
1)Creo una finestra .....
:hard:
No, guardate.... come metodo: quando i codici sono sufficientemente complessi, dovete abituarvi a postare brevi e semplici progetti esemplificativi, che riproducano il problema riscontrato, sui quali gli altri membri del forum possano effettuare le prove.
Non si può pretendere anche che gli altri debbano interpretare e riscrivere la struttura di un progetto !
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vigiot - 02 Febbraio 2018, 14:16:05
Vuott sei MITICO !  ;D
Hai sempre il modo giusto di dire le cose ...
(http://www.gambas-it.org/home/franco/Scrivania/martello.png)

Ecco il "provino"  ;)
Fatemi sapere grazie
 :ciao: :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vuott - 02 Febbraio 2018, 15:41:02
Vuott sei MITICO !
Hai sempre il modo giusto di dire le cose ...
No, io sono un coglione !
Infatti si vede dai risultati che ottengo: meno male che avevo detto di postare " brevi e semplici progetti esemplificativi ".


Va be'... comunque....
devo precisare che quando ho scritto:
A me così funziona:
http://www.gambas-it.org/smf/index.php?topic=6106.msg43163#msg43163

ho fatto un test senza modalità " .ShowModal() "
Io ho il sospetto che in qualche modo il Metodo ".ShowModal()" interferisca con quello che tu vuoi ottenere.
Questo mio sospetto, però, ovviamente va meglio verificato.

Riguardo al tuo progetto allegato, quando passo alla seconda casella ("Professione"), è impossibile inserire i dati con la tastiera: il cursore non appare e il TextBox non è accessibile.
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vigiot - 02 Febbraio 2018, 18:06:27
Grazie vuott
 :-*
Citazione
Riguardo al tuo progetto allegato, quando passo alla seconda casella ("Professione"), è impossibile inserire i dati con la tastiera: il cursore non appare e il TextBox non è accessibile.

suppongo che tu abbia dato "return"
Codice: [Seleziona]
Public Sub admin_tb1_KeyPress()
  If ((Key.Code = Key.Return) Or (Key.Code = Key.Enter) Or (Key.code = Key.Tab)) Then
    tb_2.Enabled = True
    tb_2.SetFocus
  Endif
End

Poi il tuo sospetto ha fondamento ho provato solo con Show() e và bene.
Non dovrebbe creare interferenze, ma proverò ...
E poi dai, non è così lungo il "provino" ... :D
Scherzo, ovviamente  8)
Grazie ancora
 :ciao: :ciao:
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vuott - 02 Febbraio 2018, 18:43:15
suppongo che tu abbia dato "return"

No, bensì quando premo il Button "btn_1" ("Applica").
Titolo: Re:SetFocus di un TextBox che non và
Inserito da: vigiot - 02 Febbraio 2018, 20:02:55
Tieni presente che il "provino" è stato estrapolato dal mio progetto,
quindi mancano molte parti, tra cui l'immagazzinamento dei dati inseriti, ecc.
Il compito era solo di valutare l'effetto del balloon che aveva sulla finestra.
Però li fatto che funzioni  meglio se la finestra non è in stato Modal mi lascia perplesso.
Tanto vale allora usare il MessageBox accontentandosi.
Ma non mi piace. Chiedere lumi "alle alte sfere" un altra volta ? mah?
 :-\
Però potrebbe essere utile anche ad altri, che pensi ?
Metterò risolto al post

Grazie
 :ciao: :ciao: