В блоке кода, который вы предоставили, я предполагаю, что у вас есть куча объектов RectangleShape где-то в родительском классе, которые называются RectangleClassN
, где N равно от 1 до 31.
Что вам нужно в качестве параметра для вашего метода - это некоторая коллекция RectangleShapes, а не то, что вы определили как один RectangleShape. Затем вы сможете перебирать их.
Private Sub RectangleIntersect(ByVal rectangles As IEnumerable(Of RectangleShape))
For Each rs As RectangleShape in rectangles
If rs.Location = "" Then
'something
End If
Next
End Sub
Когда вы вызываете метод, вам необходимо передать какую-то коллекцию, содержащую несколько объектов. См. Надуманный пример ниже.
Dim myRectangles As New List(Of RectangleShape)()
myRectangles.Add(RectangleShape1)
myRectangles.Add(RectangleShape2)
RectangleIntersect(myRectangles)
Поскольку сбор каждого отдельного объекта будет мучительной, вы могли бы сделать что-то вроде петли через все элементы управления или объектов, которые принадлежат к какой-то контейнер и проверить их тип. Если их тип RectangleObject, добавьте их в коллекцию. Или вы даже можете выполнить этот код внутри вашего метода RectangleIntersect.
For Each rs As RectangleShape In parentContainer.Controls ' or whatever this would be. Children? it depends on what the container is
...
Next
Это немного расплывчато. Можете ли вы более четко объяснить, что вы подразумеваете под «каждой конкретной собственностью»? –
Обратите внимание, что форма прямоугольника «PowerPacks» не совпадает с NET Rectangle, которая может смутить тех, кто не замечает этого в коде. – Plutonix
У вас есть словарь или что-то с названием RectangleShapes? Если это так, конкатенация строк должна отлично работать с ключами. В противном случае отражения, вероятно, все, что вы можете сделать. –