Событие на нарисованный объект c#

87
30 января 2022, 02:20

Есть класс Circle, который рисует окружности заданного размера. Я попытался сделать событие на клик мыши, которое показывало бы информацию по данному объекту (координаты, имя и т.д.), но у меня не получается сравнить координаты курсора мыши и данного объекта.

Можно ли как-то по-другому реализовать событие на объект по клику мыши и по фокусу (наведение курсора на объект)?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        tt = new ToolTip();
        Width = 500;
        Height = 500;
        BuildFigures();
    }
    private ToolTip tt;
    List<Circle> circles = new List<Circle>();
    protected override void OnPaint(PaintEventArgs e)
    {
        foreach(var f in circles)
        {
            f.DrawCircle(e.Graphics);
        }
    }
    protected override void OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);
        if (e.Button == MouseButtons.Left)
            foreach (var f in circles.Reverse<Circle>())
                if (f.HitTest(e.Location))
                {
                Debug.WriteLine(f.Location);
                Debug.WriteLine(e.Location);
                    tt?.Show(f.Name, this);
                }
    }

    private void BuildFigures()
    {
        float r = 25f;
        var rnd = new Random();
        for (int i = 0; i < 10; i++)
        {
            var f = new Circle(new PointF(rnd.Next(Width), rnd.Next(Height)), r);
            f.Name = "Circle = " + i;
            circles.Add(f);
        }
    }
    public class Circle
    {
        private RectangleF Rect { get; set; }
        public PointF Location { get; set; }
        public Graphics Path { get; set; }
        public string Name { get; set; }
        public Circle(PointF Point, float Radius)
        {
            this.Location = Point;
            this.Rect = new RectangleF(Point, new SizeF(Radius, Radius));
        }
        public bool HitTest(PointF point)
        {
            return Path.IsVisible(point);
        }
        public void DrawCircle(Graphics graph)
        {
            graph.DrawEllipse(Pens.Red, Rect);
            graph.FillEllipse(Brushes.Red, Rect);
        }
    }
}
READ ALSO
Функция в Unity наподобие SetInterval из JavaScript

Функция в Unity наподобие SetInterval из JavaScript

Нужно вызывать функцию каждый определённый n-ый промежуток времени

173
Поиск данных через RowFilter в dataGridView по всем столбцам

Поиск данных через RowFilter в dataGridView по всем столбцам

Есть таблица authors со столбцами fio, count, urlВсе данные загружаются в datagridview (столбец с ID тоже, но он не отображается на форме)

106
Ошибка авторизации

Ошибка авторизации

Подскажите пожалуйста, почему я получаю сообщение об ошибке когда на моём компьютере нету пользователя, которым я пытаюсь пройти удалённую...

123
Массив PointF в массиве PointF C#

Массив PointF в массиве PointF C#

Такая задача, нужно вычислить точки 6 треугольников, которые находятся на круге и записать их в массив которые хранит координаты каждого...

75