Differenze tra le versioni di "Utilizzare il tasto Tab della tastiera per spostare il cursore del mouse fra le celle di una TableView"

Da Gambas-it.org - Wikipedia.
 
(26 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Mostriamo un esempio <SUP>[ [[#Note|Nota 1]] ]</sup>, nel quale si prova a catturare la tabulazione all'interno della ''TableView'' per spostarsi con il cursore del mouse fra le celle.
+
Mostriamo alcuni esempi che consentono di muoversi fra le celle di una ''TableView'' anche utilizzando il tasto ''Tab''  oltre al tasto "invio" e ai tasti "freccia".
  
 
E' necessario attivare i Componenti ''gb.desktop'' e ''gb.desktop.x11'' .
 
E' necessario attivare i Componenti ''gb.desktop'' e ''gb.desktop.x11'' .
  
Private $hWatcher As Watcher
+
 
Private $bNoEvent As Boolean
+
'''1° esempio'''  <SUP>[ [[#Note|Nota 1]] ]</sup>
+
 
 
  '''Public''' Sub _new()
 
  '''Public''' Sub _new()
 
    
 
    
   Dim hObs As Observer
+
   Dim hObs As Observer     <FONT Color=gray>' ''Per anticipare l'evento prima che venga lanciato.''</font>
  hObs = New Observer(Me) As "TableView"
+
 
  $hWatcher = New Watcher(Me) As "TableView" 
+
  hObs = New Observer(Me) As "TableView"
 
    
 
    
 
  '''End'''
 
  '''End'''
Riga 20: Riga 20:
 
   TableView1.Columns.Count = 5                    <FONT Color=gray>' ''dichiara il numero di colonne''</font>
 
   TableView1.Columns.Count = 5                    <FONT Color=gray>' ''dichiara il numero di colonne''</font>
 
   TableView1.Rows.Count = 20                      <FONT Color=gray>' ''dichiara il numero di righe''</font>
 
   TableView1.Rows.Count = 20                      <FONT Color=gray>' ''dichiara il numero di righe''</font>
   TableView1.Columns[0].Width = 10                <FONT Color=gray>' ''dichiara la larghezza della colonna ID''</font>
+
   TableView1.Columns[0].Width = 100              <FONT Color=gray>' ''dichiara la larghezza della colonna ID''</font>
   TableView1.Columns[1].Width = 200               <FONT Color=gray>' ''dichiara la larghezza della colonna Luogo''</font>
+
   TableView1.Columns[1].Width = 100               <FONT Color=gray>' ''dichiara la larghezza della colonna Luogo''</font>
   TableView1.Columns[2].Width = 10                <FONT Color=gray>' ''dichiara la larghezza della colonna GRP''</font>
+
   TableView1.Columns[2].Width = 100              <FONT Color=gray>' ''dichiara la larghezza della colonna GRP''</font>
   TableView1.Columns[3].Width = 150               <FONT Color=gray>' ''dichiara la larghezza della colonna stato''</font>
+
   TableView1.Columns[3].Width = 100               <FONT Color=gray>' ''dichiara la larghezza della colonna stato''</font>
 
   TableView1.Columns[4].Alignment = Align.Center  <FONT Color=gray>' ''centra i pulsanti''</font>
 
   TableView1.Columns[4].Alignment = Align.Center  <FONT Color=gray>' ''centra i pulsanti''</font>
 
   TableView1.Rows.Height = 30                    <FONT Color=gray>' ''dichiara l'altezza della riga''</font>
 
   TableView1.Rows.Height = 30                    <FONT Color=gray>' ''dichiara l'altezza della riga''</font>
Riga 29: Riga 29:
 
   TableView1.Header = 3                          <FONT Color=gray>' ''ATTIVA L'INTESTAZIONE DELLE COLONNE''</font>
 
   TableView1.Header = 3                          <FONT Color=gray>' ''ATTIVA L'INTESTAZIONE DELLE COLONNE''</font>
 
   TableView1.Font.Size = 11
 
   TableView1.Font.Size = 11
  TableView1.Columns[0].Text = "ID"
 
 
   TableView1.Columns[0].Alignment = 3            <FONT Color=gray>' ''Allineamento centrato''</font>
 
   TableView1.Columns[0].Alignment = 3            <FONT Color=gray>' ''Allineamento centrato''</font>
  TableView1.Columns[1].text = "Luogo"
 
 
   TableView1.Columns[1].Alignment = 3            <FONT Color=gray>' ''Allineamento centrato''</font>
 
   TableView1.Columns[1].Alignment = 3            <FONT Color=gray>' ''Allineamento centrato''</font>
  TableView1.Columns[2].text = "GRP"
 
 
   TableView1.Columns[2].Alignment = 3            <FONT Color=gray>' ''Allineamento centrato''</font>
 
   TableView1.Columns[2].Alignment = 3            <FONT Color=gray>' ''Allineamento centrato''</font>
  TableView1.Columns[3].text = "Stato"
 
 
   TableView1.Columns[3].Alignment = 3            <FONT Color=gray>' ''Allineamento centrato''</font>
 
   TableView1.Columns[3].Alignment = 3            <FONT Color=gray>' ''Allineamento centrato''</font>
  TableView1.Columns[4].text = "Pulsanti"
+
     
 
 
 
  '''End'''
 
  '''End'''
 
   
 
   
 
   
 
   
  '''Public''' Sub TableView1_Click()   
+
  '''Public''' Sub TableView1_Click()  <FONT Color=gray>' ''Evento non osservato''</font>
 
    
 
    
   TableView1.EditWith(TextBox1)
+
   TableView1.Edit
 
        
 
        
 
  '''End'''
 
  '''End'''
 
   
 
   
 
   
 
   
  '''Public''' Sub TableView1_Save(Row As Integer, Column As Integer, Value As String)
+
  '''Public''' Sub TableView1_Save(Row As Integer, Column As Integer, Value As String)   <FONT Color=gray>' ''Serve per salvare il testo scritto all'interno delle celle.''</font>
 
    
 
    
 
   TableView1[row, column].text = value
 
   TableView1[row, column].text = value
 
    
 
    
 
  '''End'''
 
  '''End'''
 +
 
 +
 
 +
'''Public''' Sub TableView_KeyPress()  <FONT Color=gray>' ''Evento osservato''</font>
 +
 
 +
<FONT Color=gray>' ''Serve per spostarsi con tasto Tab:''</font>
 +
    <FONT Color=#B22222>If Key.Code = Key.Tab
 +
      Stop Event            </font><FONT Color=gray>' ''Lo "Stop Event" consente alla successiva linea Desktop.SendKeys("\n") di funzionare.''</font>
 +
      <FONT Color=#B22222>Desktop.SendKeys("\n")
 +
    Endif</font>
 +
     
 +
'''End'''
 +
 +
 +
 +
'''2° esempio'''  <SUP>[ [[#Note|Nota 2]] ]</sup>
 +
 +
Questo secondo esempio è una variante del codice precedente, e suppone che oltre alla ''TableView'' sia presente sul ''Form'' almeno un altro oggetto (in questo esempio avremo due ''Button'').
 +
'''Public''' Sub Form_Open()
 +
 
 +
  TableView1.Width = 400
 +
  TableView1.Columns.Count = 4
 +
  TableView1.Rows.Count = 5
 +
  TableView1.Columns[0].Width = 100
 +
  TableView1.Columns[1].Width = 100
 +
  TableView1.Columns[2].Width = 100
 +
  TableView1.Columns[3].Width = 100
 +
     
 +
'''End'''
 +
 +
 +
'''Public''' Sub TableView1_Click() 
 +
 
 +
<FONT Color=gray>' ''Impedisce che ai due "Button" possa essere attribuito il Focus con tasto Tab:''</font>
 +
  Button1.NoTabFocus = True
 +
  Button2.NoTabFocus = True
 +
<FONT Color=gray>' ''Però, qualora non vi siano oggetti sul ''Form'', si farà riferimento al solo ''Form'' così:''
 +
' '''Me.NoTabFocus = True'''</font>
 +
 
 +
  EditaTableView()
 +
 
 +
'''End'''
 +
 
   
 
   
 +
'''Public''' Sub TableView1_Save(Row As Integer, Column As Integer, Value As String)
 
    
 
    
'''Public''' Sub TableView_KeyPress() 
+
  TableView1[row, column].text = value
 
    
 
    
  <FONT Color=gray>' ''Per impedire a questi eventi di scatenare il click quando passano alla riga successiva:''</font>
+
'''End'''
  Select Case Key.Code  
+
 
    Case Key.Right, Key.Return, Key.Enter
+
 
       If TableView1.Column = 3 Then    
+
'''Public''' Sub TableView1_KeyRelease() 
 +
 
 +
<FONT Color=gray>' ''Serve per spostarsi con tasto Tab:''</font>
 +
  If Key.Code = Key.Tab
 +
    Desktop.SendKeys("\n")
 +
    EditaTableView()
 +
  Endif
 +
 
 +
'''End'''
 +
 +
 +
'''Private''' Procedure EditaTableView()
 +
 
 +
  <FONT Color=gray>' ''Se si intende, dopo aver raggiunto l'ultima cella della "TableView", passare - premendo il tasto "Tab" - il Focus ai due "Button" (decommentare queste righe):''
 +
' '''If (TableView1.Row = TableView1.Rows.Max) And (TableView1.Column = TableView1.Columns.Max) Then'''
 +
'  '''Button1.NoTabFocus = False'''
 +
'  '''Button2.NoTabFocus = False'''
 +
' '''Endif'''</font>
 +
 
 +
  TableView1.Edit
 +
 
 +
'''End'''
 +
 
 +
 
 +
 
 +
'''3° esempio'''  <SUP>[ [[#Note|Nota 3]] ]</sup>
 +
 
 +
Questo terzo esempio contempla anche la presenza in talune celle di un tipo di oggetto. Durante lo spostamento, premendo il tasto ''Tab'', da una cella all'altra della ''TableView'', saranno saltate le celle contenenti i predetti oggetti. Dunque il cursore del mouse non capiterà all'interno delle celle occupate dagli oggetti, passando così direttamente alla cella successiva.
 +
 
 +
La particolarità più importante di questo terzo codice è che premendo i tasti ''Shift''+''Tab'' (''BackTab'') il cursore tornerà dietro sino alla prima cella in alto a sinistra della ''TableView'' con le medesime modalità prima viste per le celle occupate dagli oggetti.
 +
Private $bNoEvent As Boolean
 +
Private $colCheck As Integer = 3
 +
 +
'''Public''' Sub _new()
 +
 
 +
  Dim Ny As Integer
 +
  Dim hObs As Observer
 +
 +
  hObs = New Observer(Me) As "TableView" 
 +
 
 +
  Me.Center
 +
  TableView1.Header = TableView1.Horizontal
 +
  TableView1.Columns.Count = 6     
 +
  TableView1.Columns[0].Title = "Quantità"
 +
  TableView1.Columns[1].Title = "Oggetto"
 +
  TableView1.Columns[2].Title = "Materiale"
 +
  TableView1.Columns[3].Title = "Pulsante"
 +
  TableView1.Columns[4].Title = "Sconto"
 +
  TableView1.Columns[5].Title = "Importo"
 +
   
 +
  TableView1.Columns[1].Width = 150
 +
  TableView1.Columns[2].Width = 150
 +
 
 +
  TableView1.Rows.Count = 8
 +
 
 +
  TableView1[0, 0].text = "Prova"
 +
  TableView1[1, 0].text = "Hello"
 +
  TableView1[2, 0].text = "Mela"
 +
  TableView1[3, 0].text = "Pesca"
 +
 
 +
  For Ny = 0 To 7
 +
    TableView1[Ny, $colCheck].picture = Picture["off.png"]
 +
  Next
 +
 
 +
  Catch
 +
  Message.Error(Error.Text)
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Sub TableView1_Click()
 +
 
 +
  If TableView1.Column = 2 Then
 +
    TableView1.Edit(["Giacca", "Pantalone", "Maglia", "Camicia"], False)
 +
  Else If TableView1.Column = $colCheck Then
 +
    If $bNoEvent = False Then
 +
      If TableView1.Current.Picture = Picture["on.png"] Then
 +
        TableView1.Current.Picture = Picture["off.png"]
 +
      Else
 +
        TableView1.current.Picture = Picture["on.png"]
 +
      Endif
 +
    Else
 +
      $bNoEvent = False
 +
    Endif
 +
  Else
 +
    TableView1.Edit
 +
  End If
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Sub TableView1_Save(Row As Integer, Column As Integer, Value As String)
 +
 
 +
  TableView1[row, column].text = value
 +
 
 +
'''End'''
 +
 +
 +
'''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
 
         $bNoEvent = True
 +
        TableView1.MoveTo(TableView1.Row, i - 2)
 +
      Else
 +
        TableView1.MoveTo(TableView1.Row, i - 1)
 
       Endif
 
       Endif
    <FONT Color=#B22222>Case Key.Tab
+
       TableView1.Edit
      Stop Event            </font><FONT Color=gray>' ''Lo "Stop Event" consente alla successiva linea Desktop.SendKeys("\n") di funzionare.''</font>
+
  End Select
       <FONT Color=#B22222>Desktop.SendKeys("\n")</font>
+
 
  End Select
 
 
 
 
  '''End'''
 
  '''End'''
  
Riga 75: Riga 236:
  
 
=Note=
 
=Note=
[1] Pagina e codice a cura del membro [http://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi] del forum gambas-org.it
+
[1] Il codice è a cura del membro [http://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi] del forum gambas-org.it
 +
 
 +
[2] Il codice è a cura del membro [http://www.gambas-it.org/smf/index.php?action=profile;u=402 vuott] del forum gambas-org.it
 +
 
 +
[3]  Il codice è a cura del membro [http://www.gambas-it.org/smf/index.php?action=profile;u=151 Golia] del forum gambas-org.it

Versione attuale delle 11:11, 14 ott 2016

Mostriamo alcuni esempi che consentono di muoversi fra le celle di una TableView anche utilizzando il tasto Tab oltre al tasto "invio" e ai tasti "freccia".

E' necessario attivare i Componenti gb.desktop e gb.desktop.x11 .


1° esempio [ Nota 1 ]

Public Sub _new()
 
 Dim hObs As Observer     ' Per anticipare l'evento prima che venga lanciato.
  
  hObs = New Observer(Me) As "TableView"
 
End


Public Sub Form_Open()
  
  TableView1.Width = 550                          ' dichiara la larghezza dell'intera TableView
  TableView1.Columns.Count = 5                    ' dichiara il numero di colonne
  TableView1.Rows.Count = 20                      ' dichiara il numero di righe
  TableView1.Columns[0].Width = 100               ' dichiara la larghezza della colonna ID
  TableView1.Columns[1].Width = 100               ' dichiara la larghezza della colonna Luogo
  TableView1.Columns[2].Width = 100               ' dichiara la larghezza della colonna GRP
  TableView1.Columns[3].Width = 100               ' dichiara la larghezza della colonna stato
  TableView1.Columns[4].Alignment = Align.Center  ' centra i pulsanti
  TableView1.Rows.Height = 30                     ' dichiara l'altezza della riga
  TableView1.name = "PROVA"
  TableView1.Header = 3                           ' ATTIVA L'INTESTAZIONE DELLE COLONNE
  TableView1.Font.Size = 11
  TableView1.Columns[0].Alignment = 3             ' Allineamento centrato
  TableView1.Columns[1].Alignment = 3             ' Allineamento centrato
  TableView1.Columns[2].Alignment = 3             ' Allineamento centrato
  TableView1.Columns[3].Alignment = 3             ' Allineamento centrato
     
End


Public Sub TableView1_Click()   ' Evento non osservato
  
  TableView1.Edit
     
End


Public Sub TableView1_Save(Row As Integer, Column As Integer, Value As String)   ' Serve per salvare il testo scritto all'interno delle celle.
  
  TableView1[row, column].text = value
  
End
 
  
Public Sub TableView_KeyPress()   ' Evento osservato
  
' Serve per spostarsi con tasto Tab:
    If Key.Code = Key.Tab
      Stop Event            ' Lo "Stop Event" consente alla successiva linea Desktop.SendKeys("\n") di funzionare.
      Desktop.SendKeys("\n")
    Endif
     
End


2° esempio [ Nota 2 ]

Questo secondo esempio è una variante del codice precedente, e suppone che oltre alla TableView sia presente sul Form almeno un altro oggetto (in questo esempio avremo due Button).

Public Sub Form_Open()
 
 TableView1.Width = 400
 TableView1.Columns.Count = 4
 TableView1.Rows.Count = 5
 TableView1.Columns[0].Width = 100
 TableView1.Columns[1].Width = 100
 TableView1.Columns[2].Width = 100
 TableView1.Columns[3].Width = 100
     
End


Public Sub TableView1_Click()   
 
' Impedisce che ai due "Button" possa essere attribuito il Focus con tasto Tab:
 Button1.NoTabFocus = True
 Button2.NoTabFocus = True
' Però, qualora non vi siano oggetti sul Form, si farà riferimento al solo Form così:
' Me.NoTabFocus = True
 
 EditaTableView()
 
End


Public Sub TableView1_Save(Row As Integer, Column As Integer, Value As String)
  
 TableView1[row, column].text = value
  
End
 
 
Public Sub TableView1_KeyRelease()  
 
' Serve per spostarsi con tasto Tab:
 If Key.Code = Key.Tab
   Desktop.SendKeys("\n")
   EditaTableView()
 Endif
 
End


Private Procedure EditaTableView()
 
' Se si intende, dopo aver raggiunto l'ultima cella della "TableView", passare - premendo il tasto "Tab" - il Focus ai due "Button" (decommentare queste righe):
' If (TableView1.Row = TableView1.Rows.Max) And (TableView1.Column = TableView1.Columns.Max) Then
'   Button1.NoTabFocus = False
'   Button2.NoTabFocus = False
' Endif
 
 TableView1.Edit
 
End


3° esempio [ Nota 3 ]

Questo terzo esempio contempla anche la presenza in talune celle di un tipo di oggetto. Durante lo spostamento, premendo il tasto Tab, da una cella all'altra della TableView, saranno saltate le celle contenenti i predetti oggetti. Dunque il cursore del mouse non capiterà all'interno delle celle occupate dagli oggetti, passando così direttamente alla cella successiva.

La particolarità più importante di questo terzo codice è che premendo i tasti Shift+Tab (BackTab) il cursore tornerà dietro sino alla prima cella in alto a sinistra della TableView con le medesime modalità prima viste per le celle occupate dagli oggetti.

Private $bNoEvent As Boolean
Private $colCheck As Integer = 3

Public Sub _new()
 
 Dim Ny As Integer
 Dim hObs As Observer

 hObs = New Observer(Me) As "TableView"  
 
 Me.Center
 TableView1.Header = TableView1.Horizontal
 TableView1.Columns.Count = 6       
 TableView1.Columns[0].Title = "Quantità"
 TableView1.Columns[1].Title = "Oggetto"
 TableView1.Columns[2].Title = "Materiale"
 TableView1.Columns[3].Title = "Pulsante"
 TableView1.Columns[4].Title = "Sconto"
 TableView1.Columns[5].Title = "Importo"
    
 TableView1.Columns[1].Width = 150 
 TableView1.Columns[2].Width = 150
 
 TableView1.Rows.Count = 8
 
 TableView1[0, 0].text = "Prova"
 TableView1[1, 0].text = "Hello"
 TableView1[2, 0].text = "Mela"
 TableView1[3, 0].text = "Pesca"
 
 For Ny = 0 To 7
   TableView1[Ny, $colCheck].picture = Picture["off.png"]
 Next
 
 Catch
 Message.Error(Error.Text)
 
End


Public Sub TableView1_Click()
 
 If TableView1.Column = 2 Then
   TableView1.Edit(["Giacca", "Pantalone", "Maglia", "Camicia"], False)
 Else If TableView1.Column = $colCheck Then
   If $bNoEvent = False Then
     If TableView1.Current.Picture = Picture["on.png"] Then 
       TableView1.Current.Picture = Picture["off.png"]
     Else
       TableView1.current.Picture = Picture["on.png"]
     Endif
   Else
     $bNoEvent = False
   Endif
 Else
   TableView1.Edit
 End If
 
End


Public Sub TableView1_Save(Row As Integer, Column As Integer, Value As String)
 
 TableView1[row, column].text = value
 
End


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



Note

[1] Il codice è a cura del membro Gianluigi del forum gambas-org.it

[2] Il codice è a cura del membro vuott del forum gambas-org.it

[3] Il codice è a cura del membro Golia del forum gambas-org.it