ok questa è pefertta
il metodo di datagriview .GetCellDisplayRectangle() restituisce le cordinate dell'angolo superiore sinistro della cella "visualizzata" rispetto alla tabella e tiene conto anche di colonne nascoste o non visibili perchè scrollate... direi che è Ottimma
questa è la mia sub che visualizza un bottone adiacente al bordo superiore della cella corrente selezionata... sicuramente potrà servire ad altri:
codice:
Private Sub ElencoDataGridView_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles ElencoDataGridView.CellEnter
' non esegue se è stata attivata la proprietà readonly della cella
If sender.CurrentCell.ReadOnly Then Exit Sub
' è valido solo se la cella appartiene a queste colonne
Select Case sender.columns(e.ColumnIndex).name
Case "RinnovatoGrid", "ScadenzaGrid", "ContrattoGrid"
With DataButton
' = posizione X della cella interessata + eventuale distanza tra form e datagridview
.Left = sender.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, True).X + sender.left
' = posizione Y della cella + distanza datagridview dal form - l'atezza del bottone
.Top = sender.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, True).Y + sender.top - .Height
.Tag = sender.name
.Visible = True
End With
End Select
End Sub