Io ho scritto quanto segue, utilizzando le freccie su/giu/sx/dx
Function CellKeyDown(row as Integer, column as Integer, key as String)
As Boolean
if Asc(key) = 29 then
if indexC = Listbox1.ColumnCount-1 then
indexC = 0
else
indexC = column+1
end if
Listbox1.CellType(row,indexC)=Listbox1.TypeEditable
Listbox1.editCell(row,indexC)
Listbox1.ActiveCell.SelStart=0
Listbox1.ActiveCell.SelLength=len(ListBox1.Cell(row,indexC))
end if
if Asc(key) = 28 then
if indexC = 0 then
indexC = Listbox1.ColumnCount-1
else
indexC = column-1
end if
Listbox1.CellType(row,indexC)=Listbox1.TypeEditable
Listbox1.editCell(row,indexC)
Listbox1.ActiveCell.SelStart=0
Listbox1.ActiveCell.SelLength=len(ListBox1.Cell(row,indexC))
end if
if Asc(key) = 30 then
if indexR = 0 then
indexR = Listbox1.ListCount-1
else
indexR = row-1
end if
Listbox1.CellType(indexR,column)=Listbox1.TypeEditable
Listbox1.editCell(indexR,column)
Listbox1.ActiveCell.SelStart=0
Listbox1.ActiveCell.SelLength=len(ListBox1.Cell(indexR,column))
end if
if Asc(key) = 31 then
if indexR = Listbox1.ListCount-1 then
indexR = 0
else
indexR = row+1
end if
Listbox1.CellType(indexR,column)=Listbox1.TypeEditable
Listbox1.editCell(indexR,column)
Listbox1.ActiveCell.SelStart=0
Listbox1.ActiveCell.SelLength=len(ListBox1.Cell(indexR,column))
end if
End Function
prova e fammi sapere se ti va bene.
cordiali saluti Ivano Monti
Il giorno 15/giu/09, alle ore 21:45, Massimo Lista ha scritto:
Scusa se ritorno sull'argomento, ma il problema che incontro
sull'evento
CellKeyDown non é nella selezione riga,colonna ma nel fatto che
l'istruzione:
If Key = chr(13) then
ListBox1.CellType(row,1)=Listbox1.TypeEditable
ListBox1.editCell(row,1)
ListBox1.ActiveCell.SelStart=0
ListBox1.ActiveCell.SelLength=len(ListBox1.Cell(row,1))
End if
non viene eseguita (la riga corrente non viene resa editabile), a
differenza
di quel che accade con l'evento CellClick con il click del mouse.
Io uso la versione 5. Non è per caso un bug ?
Il giorno 15 giugno 2009 19.29, Sergio Tamborini <ml_sergio@system-i.it
> ha
scritto:
Allora, ovviamente l'evento hai ragione tu... è cellkeydown
(keydown è
riferito all'evento di pressione di un tasto su tutta la listbox).
Io comunque mi sono fatto un piccolo metodo che chiamo dall'evento
cellkeydown, al quale passo quale riga e quale colonna (in pratica
quale
cella) intendo rendere editabile:
Sub SelezionaUltimaRIgaInserita(riga As integer, colonna As integer)
me.editCell(riga,colonna)
me.ActiveCell.SelStart=0
me.ActiveCell.SelLength=len(me.Cell(riga,colonna))
End Sub
...Sono poi 3 righe :)
Spero di essere stato utile!
Il giorno 15/giu/09, alle ore 16:44, Massimo Lista ha scritto:
Ho seguito il tuo consiglio.
Su evento KeyDown
if key=chr(13) then
Me.CellType(row,1)=Listbox1.TypeEditable
Me.EditCell(row, 1)
return True
end if
---ma su row mi segnala "Questo metodo o proprietà non esiste"
Invece su evento CellKeyDown ho inserito:
if key=chr(9) then
Me.CellType(row,1)=Listbox1.TypeEditable
Me.EditCell(row,1)
return True
end if
e row viene accettato, con la freccia si ottiene lo scorrimento
delle
righe
ma il campo della colonna 1 non viene reso editabile (come invece
avviene
con CellClick.
Perchè ?
Il giorno 15 giugno 2009 11.24, Sergio Tamborini <ml_sergio@system-i.it
>
ha
scritto:
Nell'evento keydown metti chr(13) che è l'invio (puoi anche
valutare il
chr(12) che è l'invio del tastierino numerico) e dici di editare
la cella
sotto... puoi anche valutare il key chr(9) che è il tab per
spostarti
alla
cella a destra :) con qualche if puoi anche fare in modo che se
arrivi
all'ultima coolonna vada alla prima cella della riga sotto. E'
fattibilissimo, ce l'ho fatta io :)
Il giorno 15/giu/09, alle ore 11:13, Massimo Lista ha scritto:
Grazie per il suggerimento.In questo modo riesco a editare i
campi di una
colonna:
On CellClick
Me.CellType(Val(str(row)),1)=Listbox1.TypeEditable
Me.EditCell(Val(str(row)),1)
però non riesco a gestire l'evento su invio, facendo in modo
tale che il
focus vada sulla stessa colonna al rigo successivo rendendola
editabile.
Devo necessariamente posizionarmi con il mouse al rigo
successivo, la
qual
cosa sarebbe molto scomodo in caso di inserimento di molti dati
(quali
ad
esempio i dati di un bilancio).
Il giorno 13 giugno 2009 9.30, Massimo Valle <maxduepuntozero@yahoo.it
>
ha
scritto:
Contrariamente a quanto sembri, la listbox funge anche da
contenitore.
Utilizzi il metodo Listbox.cell(row, column) sia per recuperare
che per
assegnare un valore. Se devi farlo inserire direttamente
all'utente
puoi
rendere editabile la cella e di conseguenza questa si comporta
come un
editfield.
Massimo Valle
On 13/giu/09, at 08:36, Massimo Lista wrote:
Ma è possibile inserire direttamente un valore in una cella di
una
listbox
?Io
ho capito che la listbox è solo un visualizzatore di dati.
Non riesco ad inserire alcun dato direttamente in una listbox.
Per modificare un campo di una listbox devo trasferire il
valore di
quel
campo in un editfield, modificarlo e ripopolare la listbox.
A me invece serve inserire direttamente il valore nel campo
della
listbox
(tipo griglia di un file excel).
E' possibile ?
Esiste un controllo ad hoc ?
Il plugin DataGrid può fungere allo scopo ?
Il giorno 12 giugno 2009 21.12, Ivano Monti <ivanomonti@libero.it
> ha
scritto:
che io sappia no, ma puoi usare una listbox cmq, legata ad un
database
o
un
recordset credo che il limite sia nelle colonne, se non erro 64
colonne
come
max, ma non vorrei dire una scemenza, le maschere viewer di
una query
che
in
realbasic non esistono se non con la listbox.
Poi puoi fare scatenare una serie di modifica e salva a
secondo di
come
vuoi muoverti nelle celle della stessa, se posso dare un
contributo
più
che
volentieri.
Ivano Monti
Developer for Mac and Windows
Email: ivanomonti @ libero.it
Url: http://www.ivanomonti.eu
Skype: ivanomonti
AIM: ivanomonti
iChat: ivanomonti
Mobile Phone: +39-392-9824007
Phone: +39 02 36648804
Google Map 45.62224,9.107407
Il giorno 12/giu/09, alle ore 19:45, Massimo Lista ha scritto:
Ho l'esigenza di un controllo che si presenti come un
editfield , ma
che
sia
anche un contenitore di dati.
Mi spiego meglio:
Mi sembra di capire che listbox e editfield sono solo dei
visualizzatori
di
dati, a me serve invece un controllo
collegato ad un database che mi consenta di inserire dei
valori in
un
campo
(tipo foglio di Excell)
In Microsoft Access ci sono le maschere con visualizzazione
continua.
In RealBasic ?
--
Massimo
--
Massimo
------
Sergio Tamborini
Brescia
http://www.system-i.it
--
Massimo
------
Sergio Tamborini
Brescia
http://www.system-i.it
--
Massimo
|