Как узнать, принадлежит ли точка щелчка мыши прямоугольнику или нет?

Как узнать координаты точки в прямоугольнике, нарисованном с помощью графического механизма? Я хочу распознать прямоугольник на основе координат, если координата щелчка мыши принадлежит прямоугольнику, который я хочу идентифицировать.

EDITED Я нарисовал несколько прямоугольников, я хочу распознать прямоугольник на основе щелчка мыши.


person NoviceToDotNet    schedule 20.09.2013    source источник
comment
Вам нужно сохранить список всех прямоугольников, которые вы нарисовали, включая их расположение и размер, а затем по щелчку мыши вам нужно выполнить простое обнаружение столкновений между точками и прямоугольниками.   -  person musefan    schedule 20.09.2013
comment
@ Эрно де Вирд, я этого не понимаю.   -  person NoviceToDotNet    schedule 20.09.2013
comment
@musefan, пожалуйста, дайте мне знать в терминах кодирования, пожалуйста.   -  person NoviceToDotNet    schedule 20.09.2013
comment
@NoviceToDotNet: Извините, это слишком много работы. Сначала попробуйте сами. Вы можете получить точку мыши относительно элемента управления при щелчке, вот так. Затем выполните итерацию по списку прямоугольников и проверьте, находится ли точка в пределах прямоугольника.   -  person musefan    schedule 20.09.2013


Ответы (1)


var point = new PointF(e.X, e.Y);

а потом

var rectanglesContainingPoint = new List<RectF>();
foreach(var rectangle in rectangles)
{
    if(rectangle.Contains(point))
    {
        rectanglesContainingPoint.Add(rectangle);
    }
}

or

var rectanglesContainingPoint = 
     rectangles.Select(rectangle=>rectangle.Contains(point)).ToList();

Вам нужно сохранить все прямоугольники в списке (прямоугольники).

person Emond Erno    schedule 20.09.2013
comment
LastOrDefault() --› rectangles.Select(rectangle=›rectangle.Contains(point)).LastOrDefault() Будет самым верхним Rectangle или default(RectF ), если прямоугольники рисуются сзади наперед. - person Jeroen van Langen; 20.09.2013
comment
могу ли я передать точку следующим образом Text = String.Format(X: {0}; Y: {1}, e.X, e.Y); - person NoviceToDotNet; 20.09.2013
comment
Сделайте point вот так: var point = new PointF(e.X, e.Y); - person Emond Erno; 20.09.2013