Differenze tra le versioni di "Utilizzare il tasto Tab della tastiera per spostare il cursore del mouse fra le celle di una TableView"
(24 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Mostriamo | + | 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". |
− | |||
+ | '''1° esempio''' <SUP>[ [[#Note|nota 1]] ]</sup> | ||
− | ''' | + | E' necessario attivare il Componente ''gb.desktop''. |
− | + | Public Sub _new() | |
− | |||
− | + | Dim hObs As Observer <FONT Color=gray>' ''Per anticipare l'evento prima che venga lanciato.''</font> | |
hObs = New Observer(Me) As "TableView" | hObs = New Observer(Me) As "TableView" | ||
− | + | End | |
− | + | Public Sub Form_Open() | |
TableView1.Width = 550 <FONT Color=gray>' ''dichiara la larghezza dell'intera TableView''</font> | TableView1.Width = 550 <FONT Color=gray>' ''dichiara la larghezza dell'intera TableView''</font> | ||
Riga 34: | Riga 33: | ||
TableView1.Columns[3].Alignment = 3 <FONT Color=gray>' ''Allineamento centrato''</font> | TableView1.Columns[3].Alignment = 3 <FONT Color=gray>' ''Allineamento centrato''</font> | ||
− | + | End | |
− | + | Public Sub TableView1_Click() <FONT Color=gray>' ''Evento non osservato''</font> | |
TableView1.Edit | TableView1.Edit | ||
− | + | End | |
− | + | 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 | |
− | + | Public Sub TableView_KeyPress() <FONT Color=gray>' ''Evento osservato''</font> | |
<FONT Color=gray>' ''Serve per spostarsi con tasto Tab:''</font> | <FONT Color=gray>' ''Serve per spostarsi con tasto Tab:''</font> | ||
Riga 59: | Riga 58: | ||
Endif</font> | Endif</font> | ||
− | + | End | |
− | '''2° esempio''' <SUP>[ [[#Note| | + | '''2° esempio''' <SUP>[ [[#Note|nota 2]] ]</sup> |
− | Questo secondo esempio è una | + | 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''), per poter dimostrare come impedire che esso assuma il ''Focus'', quando si preme il tasto Tab della tastiera. |
− | + | <BR>E' necessario attivare il Componente ''gb.desktop''. | |
+ | Public Sub Form_Open() | ||
− | TableView1.Width = | + | TableView1.Width = 400 |
− | TableView1.Columns.Count = | + | TableView1.Columns.Count = 4 |
TableView1.Rows.Count = 5 | TableView1.Rows.Count = 5 | ||
TableView1.Columns[0].Width = 100 | TableView1.Columns[0].Width = 100 | ||
Riga 75: | Riga 75: | ||
TableView1.Columns[2].Width = 100 | TableView1.Columns[2].Width = 100 | ||
TableView1.Columns[3].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() | EditaTableView() | ||
− | + | End | |
− | + | Public Sub TableView1_Save(Row As Integer, Column As Integer, Value As String) | |
TableView1[row, column].text = value | TableView1[row, column].text = value | ||
− | + | End | |
− | + | Public Sub TableView1_KeyRelease() | |
<FONT Color=gray>' ''Serve per spostarsi con tasto Tab:''</font> | <FONT Color=gray>' ''Serve per spostarsi con tasto Tab:''</font> | ||
Riga 110: | Riga 107: | ||
Endif | 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 | 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. | ||
+ | |||
+ | E' necessario attivare il Componente ''gb.desktop''. | ||
+ | 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. | + | 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 | |
− | |||
− | Select Case Key.Code | ||
− | Case Key.Right, Key.Return, Key.Enter | ||
− | If TableView1.Column = | ||
$bNoEvent = True | $bNoEvent = True | ||
− | Endif | + | Endif |
− | + | ||
− | Case Key.Tab | + | Case Key.Tab |
− | + | Stop Event | |
− | + | Desktop.SendKeys("\n") | |
− | + | ||
− | Return | + | 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 | |
− | End Select | + | 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 | ||
Riga 210: | Riga 241: | ||
[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 | [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= | + | [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 14:33, 27 giu 2024
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".
1° esempio [ nota 1 ]
E' necessario attivare il Componente gb.desktop.
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), per poter dimostrare come impedire che esso assuma il Focus, quando si preme il tasto Tab della tastiera.
E' necessario attivare il Componente gb.desktop.
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.
E' necessario attivare il Componente gb.desktop.
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