Intanto che penso a qualcosa di alternativo, ti allego il file di Golia che mi sono permesso di cambiare, magari ti può servire da spunto.
Il tuo codice può contenere il problema paventato da
kicco ("
tutto funziona a patto che la tabella non si allunghi e diventi scorrevole con i cursori laterali. A quel punto la corrispondenza va persa."), qualora la tabella interna della
TableView nel tuo programma venga as assumere una dimensione (data dalla somma delle altezze di tutte le righe presenti) superiore all'oggetto
TableView (determinando così la comparsa dei cursori laterali e la capacità di scorrere in alto ed in basso).
La
TableView, come anche la
GridWView, possiede come proprio oggetto
Children una
ScrollArea, la quale consente - muovendo i cursori laterali in basso ed in alto - di poter osservare tutta la
TableView, qualora la somma delle altezze delle righe in essa presenti superi l'altezza della
TableView medesima.
Se si presenta questa circostanza anche con il tuo codice, la corrispondenza del
Button con una determinata cella si perde facendo
scivolare con i cursori laterali la
ScrollArea della
TableView in basso o in alto.
Ad ogni modo si dovrà utilizzare proprio l'oggetto
figlio della
TableView, ossia la
ScrollArea, come base sulla quale porre eventuali oggetti (come appunto i
Button), avendo cura di ancorarli saldamente per evitare la perdita di corrispondenza con lo scorrere in alto ed in basso della
ScrollArea.
Propongo questo codice:
Private bt As Button
Private sa As ScrollArea
Public Sub Form_Open()
Dim b As Byte
Dim obs As Observer
With TableView1
.Columns.Count = 4
' Volutamente creiamo una "TableView" la cui altezza sia minore della somma delle altezze delle righe in essa contenute:'
.Rows.Count = 30
End With
sa = TableView1.Children[0]
obs = New Observer(sa) As "Scrollo"
' Creiamo due Button da porre nella "TextView":'
For b = 1 To 2
With bt = New Button(sa) As "Tasto"
.X = 0
.Y = TableView1.Rows[b].Y
.W = 40
.H = TableView1.Rows.H
.Name = CStr(b)
.Text = CStr(b)
End With
Next
End
Public Sub Tasto_Click()
Print "E' stato premuto il tasto: "; Last.Name
End
Public Sub Scrollo_Scroll()
Dim ob As Object
Dim b As Byte
For Each ob In sa.Children
Inc b
' Le risorse, che ci servono, sono le proprietà ".ScrollY" e ".ScrollX" della "ScrollArea" '
ob.Y = TableView1.Rows[b].Y - sa.ScrollY
ob.X = TableView1.Columns[0].X - sa.ScrollX
Next
End