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();
}
В приложение добавлена еще одна проверка: для щелчка мыши, который не попадает ни в одно из трех изображений. Эта проверка нужна для удаления рамки с выбранного перед этим изображения.
|
|