If(dropRect.Contains(pictureBox1.Bounds))

MessageBox.Show("Вы победили!", "Проверка попадания");

}

private void Form1_Paint(Object sender, PaintEventArgs e) {

// Выводим "прямоугольник сбрасывания"

Graphics g = e.Graphics;

Rectangle dropRect = new Rectangle(200, 100, 350, 250);

g.FillRectangle(Brushes.Blue, dropRect);

g.DrawString("Перетащите картинку в эту область.", this.Font, Brushes.Red, 200, 100);

}

Не забудьте объявить переменные перед классом формы, например,

bool isDragging;

int oldX, oldY;

 

Главную роль в проверке попадания играет метод Rectangle. Contains (). Этот метод перегружен и может принимать другой прямоугольник, точку или два значения типа int в качестве координат. Этот метод удобен в ситуации, когда необходимо проверить, попал ли пользователь щелчком мыши в прямоугольную область на форме или нет.

Рассмотрим следующую задачу: Если щелчок пришелся на какое-либо из изображений, заключить это изображение в красную рамку и изменить заголовок формы (это делается при помощи свойства Form.Text).

Первое, необходимо обеспечить перехват события MouseDown для самой формы. После этого осуществлять проверку — попадает или нет указатель мыши в область, занимаемую одним из изображений. Если ответ положительный, то значения двух переменных изменятся: переменной IsImageClicked (типа bool) будет присвоено значение true, а переменной imag (типа int) - значение, соответствующее номеру выбранного пользователем изображения. Пример кода может быть таким:

public class Form1: Form {

private bool isImageclicked;

private int imag;

private Rectangle rectA;

private Rectangle rectB;

private Rectangle rectC;

public Form1() {

InitializeComponent();

rectA= new Rectangle(15, 15, 125, 75);

rectB = new Rectangle(15, 95, 125, 75);

rectC = new Rectangle(15, 175, 125, 75);

isImageclicked = false;

this .MouseDown+=new MouseEventHandler(Form1_MouseDown);

this .Paint +=new PaintEventHandler(Form1_Paint);

}

private void Form1_Paint(Object sender, PaintEventArgs e) {

Graphics g= e. Graphics;

Pen outline = new Pen(Color.Red, 5);

// Выводим все три изображения

g.FillRectangle(Brushes.Blue,20,20,120,70);

g .FillRectangle(Brushes.Aqua,20,100,120,70);

g .FillRectangle(Brushes.BlueViolet,20,180,120,70);

// Выводим рамку (по щелчку пользователя)

if(isImageclicked == true){

if (imag==0)

g .DrawRectangle(outline, rectA);

if (imag==1)

g .DrawRectangle(outline, rectB);

if (imag==2)

g .DrawRectangle(outline, rectC);

}

}

private void Form1_MouseDown(Object sender, MouseEventArgs e) {

// Получаем координаты указателя мыши в момент щелчка

Point mousePt = new Point(e.X, e.Y);

// Проверяем, не попадает ли указатель мыши в одну из трех областей,

// занимаемых изображениями.

if (rectA.Contains(mousePt)) {

isImageclicked = true;

imag = 0;

this.Text = "Вы кликнули изображение A";

}

else {

if (rectB.Contains(mousePt)) {

isImageclicked = true;

imag = 1;

this.Text = " Вы кликнули изображение B";

}

else if (rectC.Contains(mousePt)) {

isImageclicked = true;

imag = 2;

this.Text = " Вы кликнули изображение C";

}

else {

isImageclicked = false;

this .Text = "Изображения";

}

}

// Перерисовываем форму

Invalidate();

}

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

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: