Элемент управления PictureBox

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

Создадим приложение, которое будет захватывать события MouseUp, MouseDown и MouseMove для области, занятой на форме изображением (которое помещено в PictureBox). Добавим код для работы с перетаскиванием (drag-and-drop). Пользователь сможет перетаскивать одно из изображений по всей форме. Кроме того, будем осуществлять проверку того, где оказалось перетаскиваемое изображение после того, как пользователь его отпустит. Если оно попало в область, занимаемую заданным прямоугольником, будет выводиться специальное сообщение. Таким образом, реализуем механизм, называемый «проверкой попадания» — hit testing.

Назначение объекту PictureBox изображения, которое будет в нем содержаться, выглядит следующим образом:

 

Свойство PictureBox, — SizeMode, для него используются значения из перечисления PictureBoxSizeMode. Это свойство позволяет определить, как именно будет выводиться изображение внутри PictureBox. В нашем случае было использовано значение StretchImage, которое означает, что изображение должно быть сжато или растянуто таким образом, чтобы полностью соответствовать размерам PictureBoх. Другие возможные значения представлены в таблице 5.8.

Таблица 5.8.Значения перечисления PictureBoxSizeMode

Значение Описание
AutoSize Значения PictureBox будут изменены таким образом, чтобы полностью соответствовать размерам изображения
CenterImage Если размеры PictureBox будут больше, чем размеры изображения, изображение будет позиционировано точно по центру PictureBox, Если же размеры изображения будут превышать размеры PictureBox, то выступающие края будут обрезаны
Normal Изображение будет расположено в верхнем левом углу PictureBox. Если размеры изображения превысят размеры PictureBox, выступающие края будут обрезаны

 

Выберите Choose Image для выбора изображения для отображения в PictureBox.

После того как создали PictureBox и настроили его свойства, следующая задача — обеспечить обработчики для событий MouseMove, MouseUp и MouseDown.

// Добавляем обработчики для следующих событий

pictureBox1.MouseDown +=new MouseEventHandler(pictureBox1_MouseDown);

pictureBox1.MouseUp +=new MouseEventHandler(pictureBox1_MouseUp);

pictureBox1.MouseMove +=new MouseEventHandler(pictureBox1_MouseMove);

this.Paint +=new PaintEventHandler(Form1_Paint);

В обработчике события MouseDown, во-первых, устанавливается значение true для переменной isDragging (началась операция перетаскивания), а во-вторых, фиксируются координаты указателя мыши при наступлении этого события:

// Обработчик события MouseDown для объекта PictureBox

private void pictureBox1_MouseDown(Object sender, MouseEventArgs e) {

isDragging = true;

oldX = e.X;

oldY = e.Y;

}

Обработчик события MouseMove обеспечивает перемещение PictureBox по форме (изменяя значения свойств Тор и Left). Для расчета нового положения PictureBox используется смещение указателя мыши относительно исходной позиции:

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

private void pictureBox1_MouseMove(Object sender, MouseEventArgs e) {

if(isDragging) {

// Определяем новые координаты для PictureBox по разности между

// старым и новым положением указателя мыши

pictureBox1.Top =pictureBox1.Top + (e.Y - oldY);

pictureBox1.Left = pictureBox1.Left + (e.X - oldX);

}

}

Далее обработчик события MouseUp должен установить значение переменной isDragging равным false — это признак окончания операции перетаскивания. Кроме того, по условиям задачи должна производиться проверка: если перемещаемый PictureBox отпущен внутри определенной области формы (ограниченной размерами объекта Rectangle), то пользователь добился успеха.

Таким образом, весь оставшийся необходимый код выглядит следующим образом:

private void pictureBox1_MouseUp(Object sender, MouseEventArgs e) {

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

isDragging = false;


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



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