Autore Topic: Bottone in una TableView  (Letto 3803 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Bottone in una TableView
« Risposta #30 il: 11 Ottobre 2016, 20:32:20 »
Mi sembra funzionare
Io e Gianluigi - in privato - ci stiamo consultando per trovare altre eventuali soluzioni (ci sarebbe pure una mia leggera variante), ma quella sua originaria resta per ora ancora la migliore.   




« Ultima modifica: 11 Ottobre 2016, 20:50:27 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Bottone in una TableView
« Risposta #31 il: 11 Ottobre 2016, 20:45:58 »
..
Già che ci siamo.....BackTab  ;)

ci avevo già pensato  :P
Vedremo ora penso a tab...
Citazione
Nella classe GridBox di Milio i due pulsanti funzionano bene nella griglia, saltano la colonna "Check" senza variare il contenuto, ma non ho proprio capito come ha fatto :rolleyes:

Darò un occhiata, grazie.
 :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:Bottone in una TableView
« Risposta #32 il: 11 Ottobre 2016, 22:30:20 »
Siccome sto per andare a dormire, vi aggiorno su un piccolo passetto in avanti, ma solo per quanto riguarda ButtonDraw:
Codice: [Seleziona]
Public Sub TableView_KeyPress()  
  ' Per impedire a questi eventi di scatenare il
  ' click quando passano alla riga successiva. 
 
  Select Case Key.Code   
    Case Key.Right, Key.Return, Key.Enter
      If TableView1.Column = 3 Then     
        $bNoEvent = True
      Endif   
    ' Serve per spostarsi con Tab.
    Case Key.Tab     
      If Application.ActiveControl = TextBox1 Then       
        If TableView1.Row = -1 Then         
          Desktop.SendKeys("\t")
          Return
        Endif     
        If TableView1.Row = TableView1.Rows.Count - 1 And TableView1.Column = TableView1.Columns.Count - 2 Then         
          Desktop.SendKeys("\t")
        Else
          Stop Event
          Desktop.SendKeys("\n")
        Endif
      Endif     
  End Select 
 
End
con questo codice alla fine dei tab interni tabulando ancora si da il focus ai button
Buonanotte  :sleepy:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Bottone in una TableView
« Risposta #33 il: 11 Ottobre 2016, 22:52:56 »
con questo codice alla fine dei tab interni tabulando ancora si da il focus ai button

Ma tu vuoi che sia così, o no ?
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Bottone in una TableView
« Risposta #34 il: 12 Ottobre 2016, 12:57:14 »
con questo codice alla fine dei tab interni tabulando ancora si da il focus ai button

Ma tu vuoi che sia così, o no ?

Certo, ma questo codice funziona solo con TableView1.EditWith(TextBox1) non avevo capito che tu avevi già trovato la soluzione per l'esempio della wiki.
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:Bottone in una TableView
« Risposta #35 il: 13 Ottobre 2016, 18:21:19 »
Aggiorno alla terza versione, adesso non scatena l'evento click neanche a ritroso col tasto Left.
Ho inserito una combo per una lista di colonna e il tab la attraversa normalmente.
Purtroppo per quanto riguarda BackTab niente da fare almeno con questa impostazione.  :'(
Ho provato sia in TableView_KeyPress che con TextBox1_KeyPres ma non sono riuscito a nulla.
Se provate ad aggiungere questo codice vedrete che con qualcosa scritto nelle textbox si evidenzierà il testo.
Questo sta ad indicare che lo Stop Event coinvolge solo il tab e non shift, infatti è lo stesso comportamento che avremmo usando i tasti Shift + Left.
Codice: [Seleziona]
Public Sub TextBox1_KeyPress()
 
  If Key.Code = Key.BackTab Then
    Stop Event   
    'If Key.Shift Then Stop Event
    If TableView1.Column = 0 And TableView1.Row = 0 Then
    Else
      'Print "LEFT"
      Desktop.SendKeys("[Left]")
    Endif
  Endif
 
End

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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Bottone in una TableView
« Risposta #36 il: 14 Ottobre 2016, 02:23:36 »
 :)
« Ultima modifica: 14 Ottobre 2016, 19:16:00 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 Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re:Bottone in una TableView
« Risposta #37 il: 14 Ottobre 2016, 18:14:57 »
Io risolverei così.. anche se è poco elegante
Citazione
Public Sub TableView_KeyPress() 
Dim i As Integer

  Select Case Key.Code
    Case Key.Right, Key.Left, Key.Return, Key.Enter
      If TableView1.Column = $colCheck - 1 Or $colCheck + 1 Then
        $bNoEvent = True
      Endif
 
    Case Key.Tab
      Stop Event
      Desktop.SendKeys("\n")
     
 
 
    Case Key.BackTab
       Stop Event
          If TableView1.row = 0 And TableView1.Column = 0 Then
              Return 
          Endif
        i = TableView1.Column
        If TableView1.Column = 0 Then
          i = TableView1.Columns.Max + 1
          TableView1.Row = TableView1.Row - 1
        Endif
        If TableView1.Column = $colCheck + 1 Then
            $bNoEvent = True
            TableView1.MoveTo(TableView1.Row, i - 2)
          Else
            TableView1.MoveTo(TableView1.Row, i - 1)
        Endif
        TableView1.Edit
       
       
       
       
  End Select
 
End

Allego esempio

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Bottone in una TableView
« Risposta #38 il: 14 Ottobre 2016, 19:15:34 »
Bravo, Golia.
Poiché il tuo esempio comunque comporta due particolarità (salto delle celle occupate dagli oggetti e BackTab) ho ritenuto utile riportare (...se non sei contrario a posteriori  :) ) il tuo codice nella pagina che stiamo scrivendo della WIKI.


Mostriamo, dunque, anche agli altri membri dove - per ora - siamo arrivati:

http://www.gambas-it.org/wiki/index.php?title=Utilizzare_il_tasto_Tab_della_tastiera_per_spostare_il_cursore_del_mouse_fra_le_celle_di_una_TableView
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Bottone in una TableView
« Risposta #39 il: 14 Ottobre 2016, 21:38:53 »
Ciao Golia,
prima cosa complimenti per la soluzione anche se purtroppo non si adatta a mio ButtonDraw. :'(
A proposito, perché non hai fatto un esempio con button qui, visto il titolo, e uno con check la?  :P
A me la tabulazione rimane confinata all'interno della tableview, non c'è il sistema di farla uscire in modo da ottenere il comportamento atteso da chi non usa il mouse?

Ti suggerisco questo cambiamento che oltre a tutto fa uscire il BackTab dalla tableview e sposta il focus sul pulsante (se non vuoi uscire dai confini della tableview basta rispostare Stop Event prima di If):
Codice: [Seleziona]
    Case Key.BackTab      
      If TableView1.row = 0 And TableView1.Column = 0 Then
        Return 
      Endif
      Stop Event
      Select Case TableView1.Column
        Case 0
          TableView1.MoveTo(TableView1.Row - 1, TableView1.Columns.Max)
        Case 4
          '$bNoEvent = True ' Qui non serve
          TableView1.MoveTo(TableView1.Row, TableView1.Column - 2)
        Case Else
          TableView1.MoveTo(TableView1.Row, TableView1.Column - 1)
      End Select     
      TableView1.Edit
:ciao: :ciao: :ciao:

PS Non ho risposto prima perché oggi da noi, paurosa tromba d'aria che ci ha tenuti oltre che in apprensione anche senza energia elettrica e naturalmente il portatile era quasi scarico.  ;D
Perché non hai messo il codice fra cancelletti? Voi anziani dovete dare l'esempio  :violent:
« Ultima modifica: 14 Ottobre 2016, 21:40:16 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re:Bottone in una TableView
« Risposta #40 il: 18 Ottobre 2016, 14:32:45 »
Citazione
A proposito, perché non hai fatto un esempio con button qui, visto il titolo, e uno con check la?  :P
:-\Mi viene più naturale pensare a un check dentro la griglia che un button....  :-\
Citazione
A me la tabulazione rimane confinata all'interno della tableview, non c'è il sistema di farla uscire in modo da ottenere il comportamento atteso da chi non usa il mouse?
Si è vero anche quà al mio punto di vista va bene così, basta mettere dei controlli per uscire dal focus della griglia, premendo un tasto a scelta tipo che ne so.. F2
Citazione
Perché non hai messo il codice fra cancelletti? Voi anziani dovete dare l'esempio  :violent:
:D siamo abbastanza giovani e quindi sbadati  :P :-*