- •1. Цель работы
- •2. Краткая теория
- •2.1. Работа с перьями
- •2.2. Работа с кистью
- •2.2.1. Кисть для сплошной закраски
- •2.2.2. Кисти типа HatchBrush
- •2.2.3. Кисти типа TextureBrush
- •2.2.4. Градиентные кисти
- •2.3. Проверка попадания в область изображения
- •2.4. Проверка попадания в область, отличную от прямоугольной
- •2.5. Определение цветовых значений
- •2.6. Стандартное диалоговое окно выбора цвета
- •3. Пример выполнения работы
- •3.1. Визуальное проектирование диалогового окна
- •3.2. Проектирование программного кода
- •3.2.1. Начальное рисование фигуры
- •3.2.2. Реализация движения фигуры
- •3.2.3. Программная реализация «отскакивания от стенок»
- •3.2.4. Изменение скорости движения круга
- •3.2.5. Создание диалоговой панели выбора цвета заливки
- •3.2.6. Создание свойства для получения цвета
- •3.2.7. Проверка попадания курсора мыши внутрь круга
- •If (прямоугольник.Contains(точка_курсора))
- •3.2.8. Изменение цвета круга
- •4. Варианты заданий для самостоятельной работы
3.2.8. Изменение цвета круга
Прежде всего, в класс формы необходимо добавить переменную, задающую цвет круга:
Color myColor;
Начальное значение (желтый цвет) присваивается ей в конструкторе формы:
myColor = Color.Yellow;
Изменение цвета круга происходит при щелчке левой кнопки мыши внутри круга (возможно, движущегося) в обработчике события MouseClick (не просто Click!) компонента pictureBox1. Пояснения к коду приведены в комментариях:
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
//проверяем, был ли щелчок именно левой кнопкой мыши
if (e.Button == MouseButtons.Left)
{
//получаем точку с координатами места щелчка
Point pt = new Point(e.X, e.Y);
//если эта точка - внутри фигуры (круга)
if (path.IsVisible(pt))
{
//создаем объект формы выбора цвета
Form2 form = new Form2();
//передаем в форму текущий цвет круга
form.CircleColor = myColor;
//отображаем форму на экране
if (form.ShowDialog() == DialogResult.OK)
{
//получаем значение выбранного цвета
myColor = form.CircleColor;
//перерисовываем круг
pictureBox1.Invalidate();
}
}
}
}
После этого остается лишь указание значение выбранного цвета при создании кисти: в методе pictureBox1_Paint строку
HatchBrush brush = new HatchBrush(HatchStyle.SolidDiamond, Color.Yellow);
заменить на строку
HatchBrush brush = new HatchBrush(HatchStyle.SolidDiamond, myColor);
4. Варианты заданий для самостоятельной работы
В каждом варианте необходимо реализовать движение требуемого изображения по заданной траектории, не допуская при этом выход фигуры за пределы области рисования. Каждое изображение состоит из нескольких (двух-трех) элементарных фигур. Предусмотреть:
возможность изменения скорости движения с помощью компонента TrackBar;
выбор цвета заливки фигуры нажатием левой кнопки мыши внутри изображения. Для выбора используется стандартное диалоговое окно выбора цвета (компонент ColorDialog);
выбор стиля заливки фигуры нажатием правой кнопки мыши внутри изображения. Для выбора используется пользовательское диалоговое окно с радиокнопками.
№ варианта |
Вид изображения |
Траектория движения |
|
|
|
Вдоль границ области рисования по часовой стрелке |
|
|
|
Вдоль границ области рисования против часовой стрелки |
|
|
|
От центра области рисования: вверх, вниз, влево, вправо |
|
|
|
От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру |
|
|
|
От центра области рисования поочередно к углам. От угла – назад в центр |
|
|
|
Вдоль границ области рисования по часовой стрелке |
|
|
|
Вдоль границ области рисования против часовой стрелки |
|
|
|
От центра области рисования: вверх, вниз, влево, вправо |
|
|
|
От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру |
|
|
|
От центра области рисования поочередно к углам. От угла – назад в центр |
|
|
|
Вдоль границ области рисования по часовой стрелке |
|
|
|
Вдоль границ области рисования против часовой стрелки |
|
|
|
От центра области рисования: вверх, вниз, влево, вправо |
|
|
|
От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру |
|
|
|
От центра области рисования поочередно к углам. От угла – назад в центр |
|
|
|
Вдоль границ области рисования по часовой стрелке |
|
|
|
Вдоль границ области рисования против часовой стрелки |
|
|
|
От центра области рисования: вверх, вниз, влево, вправо |
|
|
|
От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру |
|
|
|
От центра области рисования поочередно к углам. От угла – назад в центр |
|
|
|
Вдоль границ области рисования по часовой стрелке |
|
|
|
Вдоль границ области рисования против часовой стрелки |
|
|
|
От центра области рисования: вверх, вниз, влево, вправо |
|
|
|
От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру |
|
|
|
От центра области рисования поочередно к углам. От угла – назад в центр |
|
|
|
Вдоль границ области рисования по часовой стрелке |
|
|
|
Вдоль границ области рисования против часовой стрелки |
|
|
|
От центра области рисования: вверх, вниз, влево, вправо |
|
|
|
От центра области рисования: влево, вверх, вправо, вниз. От каждой стенки – к центру |
|
|
|
От центра области рисования поочередно к углам. От угла – назад в центр |
