Я предполагаю, что вы рисуете фигуры в порядке их появления в списке shapes
, поэтому сначала вы рисуете фигуру 0, затем фигуру 1 и т. Д.
Таким образом, форма с большим индексом - это форма сверху, и вы можете использовать обратную петлю For
, чтобы найти ее:
Dim selectedIndex = -1
For index = shapes.Count-1 To 0 Step -1
If(shapes(index).IsVisible(Point.Empty)) Then
selectedIndex = index
shapes(index).Highlight = True
Exit For
End If
Next
' selectedIndex contains the selected index
Я также рекомендую использовать Using
при создании GraphicsPath
и Region
, например, при создании IsVisible
:
Public Function IsVisible(pt As Point) As Boolean
Using p As New GraphicsPath
p.AddEllipse(New Rectangle(Location, Size))
Return p.IsVisible(pt)
End Using
End Function