Как назначить обработчик события щелчка для части нарисованного прямоугольника?

Представьте, что я использую графические классы .NET для рисования прямоугольника.

Как я могу назначить событие так, чтобы, если пользователь щелкает определенную точку или определенный диапазон точек, что-то происходит (обработчик события щелчка)?

Я читал CLR через C # и раздел событий, и я подумал об этом сценарии из того, что я прочитал.

Пример кода этого действительно улучшил бы мое понимание событий в C # / .NET.

Спасибо

12.12.2008 00:57:13
2 ОТВЕТА
РЕШЕНИЕ

Метод PointToClient переводит координаты курсора в координаты управления. Т.е. если курсор находится в позиции (screenX, screenY) на экране, он может находиться в позиции (formX, formY) относительно верхнего левого угла формы. Нам нужно вызвать его, чтобы привести положение курсора в систему координат, используемую нашим прямоугольником.

Invalidate метод делает управление перерисовывать себя. В нашем случае он запускает обработчик события OnPaint для перерисовки прямоугольника с новым цветом границы.

0
12.12.2008 04:48:37

Вы можете назначить обработчик события Click, чтобы контролировать, чья поверхность будет использоваться для рисования прямоугольника. Вот небольшой пример: когда вы нажимаете на форму внутри прямоугольника, она будет рисоваться с красной рамкой, когда вы щелкаете снаружи, она будет рисоваться с черной рамкой.

public partial class Form1 : Form
{
    private Rectangle rect;
    private Pen pen = Pens.Black;

    public Form1()
    {
        InitializeComponent();
        rect = new Rectangle(10, 10, Width - 30, Height - 60);
        Click += Form1_Click;
    }

    protected override void OnPaint(PaintEventArgs e) 
    {
        base.OnPaint(e);
        e.Graphics.DrawRectangle(pen, rect);
    }

    void Form1_Click(object sender, EventArgs e)
    {
        Point cursorPos = this.PointToClient(Cursor.Position);
        if (rect.Contains(cursorPos)) 
        {
            pen = Pens.Red;
        }
        else
        {
            pen = Pens.Black;
        }
        Invalidate();
    }
}
5
12.12.2008 01:11:01