Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Название:ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2007
- Город:Москва • Санкт-Петербург • Киев
- ISBN:ISBN 5-8459-1124-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание краткое содержание
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Graphics g = e.Graphics;
g.FillRectangle(Brushes.AntiqueWhite, dropRect);
// Вывод инструкции.
g.DrawString("Тащите этого парня сюда!", new Font("Times New Roman", 25), Brushes.Red, dropRect);
}
Запустив свое приложение, вы увидите окно, подобное показанному на рис. 20.19.

Рис. 20.19. Увлекательная игра "Счастливый пижон"
Если вы сделаете все, что требуется для победы в игре, вы увидите окно "восхваления", показанное на рис. 20.20.

Рис 20.20. У вас железные нервы!
Исходный код.Проект DraggingImages размещен в подкаталоге, соответствующем главе 20.
Проверка попадания в область изображения
Проверить попадание в область типа, производного от Control (например, типа PictureBox очень просто, поскольку такой тип может сам отвечать на события мыши. Но что делать в том случае, когда нужно выполнять проверку попадания в область геометрического шаблона, отображенного на поверхности формы?
Для иллюстрации соответствующего процесса давайте снова рассмотрим предыдущее приложение BasicImages, чтобы наделить его некоторыми дополнительными возможностями. Нашей целью является выявление того, что пользователь щелкнул на одном из трех изображений. Выяснив, на каком именно изображении был выполнен щелчок, мы с помощью изменения свойства Text формы выделяем это изображение рамкой шириной в 5 пикселей.
Первым шагом должно быть определение нового множества членов-переменных типа Form, представляющих объекты Rectangle, для которых будет выполняться регистрация события MouseDown. При наступлении такого события нужно программно выяснить, находятся ли поступающие координаты (x, y) в рамках границ объектов Rectangle, используемых для визуализации объектов Image. Выяснив, что пользователь щелкнул на изображении, мы должны установить приватную булеву переменную (isImageClicked) равной true (истина) и указать, какое изображение было выбрано, используя для этого другую переменную и соответствующее значение из пользовательского перечня ClickedImage, определенного следующим образом.
enum ClickedImage {
ImageA, ImageB, ImageC
}
С учетом сказанного, вот как может выглядеть исходная модификация нашего класса формы.
public partial class MainForm: Form {
private Bitmap[] myImages = new Bitmap(3];
private Rectangle[] imageRects = new Rectangle[3];
private bool isImageClicked = false;
ClickedImage imageClicked = ClickedImage.ImageA;
public MainForm() {
…
// Установка прямоугольников.
imageRects[0] = new Rectangle(10, 10, 90, 90);
imageRects[1] = new Rectangle(10, 110, 90, 90);
imageRects[2] = new Rectangle (10, 210, 90, 90);
}
private void MainForm_MouseDown(object sender, MouseEventArgs e) {
// Получение координат (х, у) щелчка.
Point mousePt = new Point(e.X, e.Y);
// Проверка попадания указателя в любой из прямоугольников.
if (imageRects[0].Contains(mousePt)) {
isImageClicked = true;
imageClicked = ClickedImage.ImageA;
this.Text = "Вы щелкнули на изображении А";
} else if (imageRects[1].Contains(mousePt)) {
isImageClicked = true;
imageClicked = Clickedlmage.ImageB;
this.Text = "Вы щелкнули на изображении В";
} else if (imageRects[2].Contains(mousePt)) {
isImageClicked = true;
imageClicked = ClickedImage.ImageC;
this.Text = "Вы щелкнули на изображении C";
} else { // Попадания не обнаружено, использовать умолчания.
isImageClicked = false;
this.Text = "Проверка попаданий в зону изображения";
}
// Обновление области клиента.
Invalidate();
}
}
Обратите внимание на то, что при последней проверке член-переменная isImagеCliсked устанавливается равной false (ложь), поскольку пользователь не выполнил щелчка ни одном из трех изображений. Это важно, если вы хотите удалить контур у ранее выделенного изображения. После проверки всех элементов область клиента обновляется. Вот как выглядит модифицированный обработчик Paint.
private void MainForm_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
// Визуализация изображений.
…
// Прорисовка контура (при щелчке в соответствующем месте)
if (isImageClicked == true) {
Pen outline = new Pen(Color.Tomato, 5);
switch (imageClicked) {
case ClickedImage.ImageA:
g.DrawRectangle(outline, imageRects[0]);
break;
case Clickedlmage.ImageB:
g.DrawRectangle(outline, imageRects[1]);
break;
case ClickedImage.ImageC:
g.DrawRectangle(outline, imageRects[2]);
break;
default:
break;
}
}
}
В данный момент вы уже можете запустить свое приложение и убедиться в том, что контур появляется вокруг каждого изображения, на котором был выполнен щелчок (и что никакого контура не появляется, когда вы щелкаете за пределами этих изображений).
Проверка попадания в область, отличную от прямоугольной
Теперь давайте выясним, как выполнить проверку попадания в область, форма которой отличается от прямоугольника? Предположим, что вы обновили свое приложение так, что теперь в нем отображается геометрический шаблон неправильной формы, и при щелчке на этом шаблоне его тоже требуется выделить с помощью контура (рис. 20.21).

Рис. 20.21. Проверка попадания в многоугольники
Этот геометрический образ был создан на форме с помощью метода FillPath() типа Graphics. Указанный метод получает на вход экземпляр объекта GraphicsPath, инкапсулирующий последовательность соединенных линий, кривых и строк. Добавление новых элементов в экземпляр GraphicsPath осуществляется с помощью последовательности связанных методов Add, как описывается в табл. 20.9.
Таблица 20.9.Связанные методы Add класса GraphicsPath
Методы | Описание |
---|---|
AddArc() | Добавляет к имеющейся фигуре эллиптическую дугу |
AddBezier() AddBeziers() | Добавляет к имеющейся фигуре кубическую кривую Безье (или множество кривых Безье) |
AddClosedCurve() | Добавляет к имеющейся фигуре замкнутую кривую |
AddCurve() | Добавляет к имеющейся фигуре кривую |
AddEllipse() | Добавляет к имеющейся фигуре эллипс |
AddLine() AddLines() | Добавляет к имеющейся фигуре сегмент линии |
AddPath() | Добавляет к имеющейся фигуре указанный GraphicsPath |
AddPie() | Добавляет к имеющейся фигуре сектор круга |
AddPolygon() | Добавляет к имеющейся фигуре многоугольник |
AddRectangle() AddRectangles() | Добавляет к имеющейся фигуре прямоугольник (или несколько прямоугольников) |
AddString() | Добавляет к имеющейся фигуре текстовую строку |
Укажите using System.Drawing.Drawing2D и добавьте новый член GraphicsPath в класс Form. В рамках конструктора формы постройте множество элементов, представляющих соответствующую траекторию.
Читать дальшеИнтервал:
Закладка: