For mine i use a 2 dimensional array of points.

PrivateSub Form_Grid()

Dim X, Y AsInteger

X = Loc.X

Y = Loc.Y

For Lp AsInteger = 0 To Gloc.GetLength(0) - 1

Y = Loc.Y

For lP2 AsInteger = 0 To Gloc.GetLength(1) - 1

Gloc(Lp, lP2) = New Point(X, Y)

Y += Height

Next

X += Width

Next

EndSub

Loc is the start location of the grid, Gloc is my array holding the points, X would be the 0 dimesion, and Y the 1 dimension

now that we have this we need to know which tile has been clicked so lets look at that now

Public

Function Return_Tile(ByVal FrmPoint As Point) As Point

Dim FrmX, FrmY AsDouble

'if the point is within the grid

If Is_Within(FrmPoint, Loc, Bounding_Rectangle.Height, Bounding_Rectangle.Width) = TrueThen

'adjust the point so that on the amount that it intersect with the grid is used to calulate the tile

FrmX = (FrmPoint.X - Loc.X) / (Tile_Width)

FrmY = (FrmPoint.Y - Loc.Y) / (Tile_Height)

'Since this is alway a value of 5.5 would return 6 we must round down for all decimals places

FrmX = Decimal.Floor(FrmX)

FrmY = Decimal.Floor(FrmY)

Else

' If not in grid the select first tile, looking of a better way to handle this mabye just return it current location.

FrmX = 0

FrmY = 0

EndIf

ReturnNew Point(FrmX, FrmY)

EndFunction

You can use cursor.postion if you grid use screen coordiinates or the E from the control you using on the mouse click event E.location as FRMPoint

with these this you should be able to create a grid formed from points and find the out which tile was clicked.

also you will need this function to use the one above simple really just check to see if a point is within a rectangle

Public Function Is_Within(ByVal Loc1 As Point, ByVal Loc2 As Point, ByVal Height As Integer, ByVal Width As Integer) As Boolean

If Loc1.X >= Loc2.X And Loc1.X <= Loc2.X + Width And Loc1.Y >= Loc2.Y And Loc1.Y <= Loc2.Y + Height Then

Return True

End If

Return False

End Function