#vb.net
#vb.net
Вопрос:
У меня есть панель, которую я использую в качестве графики. Я не хочу, чтобы при перемещении мыши в некоторые точки на этой панели курсор мыши менялся. Я использовал приведенный ниже код, который работает нормально, но я не знаю, что делать, если у меня 100 баллов или больше.
Dim targetpoints As New List(Of Point)
targetpoints.Add(New Drawing.Point(50, 50))
targetpoints.Add(New Drawing.Point(200, 50))
targetpoints.Add(New Drawing.Point(50, 200))
targetpoints.Add(New Drawing.Point(200, 200))
If CheckRange(e.X, e.Y, targetpoints(0).X, targetpoints(0).Y) OrElse
CheckRange(e.X, e.Y, targetpoints(1).X, targetpoints(1).Y) OrElse
CheckRange(e.X, e.Y, targetpoints(2).X, targetpoints(2).Y) OrElse
CheckRange(e.X, e.Y, targetpoints(3).X, targetpoints(3).Y) Then
Me.Cursor = Cursors.Cross
Else
Me.Cursor = Cursors.Default
End If
Private Function CheckRange(X As Integer, Y As Integer, TargetX As Integer, TargetY As Integer) As Boolean
Dim Range As Boolean
If Math.Abs(X - TargetX) <= (5) AndAlso Math.Abs(Y - TargetY) <= 5 Then
Range = True
Else
Range = False
End If
Return Range
End Function
Комментарии:
1. Обратите внимание, что ваш
CheckRange
метод слишком подробный. Все, что вам нужно, этоReturn Math.Abs(X - TargetX) <= 5 AndAlso Math.Abs(Y - TargetY) <= 5
.
Ответ №1:
If targetpoints.Any(Function(p) CheckRange(e.X, e.Y, p.X, p.Y)) Then
Смотрите Документацию по Any
методу здесь .
Комментарии:
1. что, если нам нужно получить ту сущность, для которой выполнено условие?
2. @AnasAhmed, если у вас есть новый вопрос, опубликуйте новый вопрос, содержащий всю и только информацию, относящуюся к этому новому вопросу. Если уместно предоставить ссылку на этот вопрос, то обязательно сделайте это.
3. @AnasAhmed, если бы вы последовали совету упростить
CheckRange
метод, как я предложил в своем комментарии к вопросу, вы могли бы вообще отказаться от этого метода, если только вы не хотите вызывать его в другом месте. тоже. Вы могли бы просто изменить этоIf
утверждение наIf targetpoints.Any(Function(p) Math.Abs(e.X - p.X) <= 5 AndAlso Math.Abs(e.Y - p.Y) <= 5) Then
. В противном случае, если у этого метода нет документации, объясняющей, что он делает, он не имеет никакой ценности. Простой комментарий кIf
оператору, объясняющий, что он делает, был бы лучше.