Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/35: Рейтинг темы: голосов - 35, средняя оценка - 4.77
1 / 1 / 1
Регистрация: 26.12.2011
Сообщений: 46

Рисование на PictureBox - растягивание, перетаскивание фигур

07.03.2012, 21:03. Показов 7538. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, такая проблема: пишу что-то вроде графического редактора, в числе прочих нужно реализовать рисование графических примитивов как в Paint - чтобы при рисовании, например, линии было видно ее растягивание; плюс возможность перетаскивания фигур и т.д. Сейчас карандаш работает нормально, а вот линия - нет, при нажатии на поле нарисованная она пропадает.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
private void pictureBox1_MouseDown_2(object sender, MouseEventArgs e)
        {
            Graphics g = Graphics.FromImage(bmp);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            Pen blackPen = new Pen(Color.Black, size);
            if (e.Button == MouseButtons.Left)
            {
                if (LineOnOff == true)//включается рисовании линии
                {
                    x_MouseDown_1 = e.X;
                    y_MouseDown_1 = e.Y;
                    OffOn = true;
                }
 
                if (PencilOnOff == true)//рисование карандашом
                {
                    OffOn = true;
                    x_MouseDown_1 = e.X;
                    y_MouseDown_1 = e.Y;
                }
            }
 
            pictureBox1.Image = bmp;
        }
 
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            Pen blackPen = new Pen(Color.Black, size);
            if (Button.MouseButtons == MouseButtons.Left)
            {
                if (PencilOnOff == true)
                {
                    if (OffOn == true)
                    {
                        Graphics g = Graphics.FromImage(bmp);
                        g.SmoothingMode = SmoothingMode.AntiAlias;
                        g.DrawLine(blackPen, x_MouseDown_1, y_MouseDown_1, e.X, e.Y);
                        x_MouseDown_1 = e.X;
                        y_MouseDown_1 = e.Y;
                        pictureBox1.Image = bmp;
 
                    }
                }
                if (LineOnOff == true)
                {
                    if (OffOn == true)
                    {
                        {
                            ((PictureBox)sender).Refresh();
                            Graphics g = ((PictureBox)sender).CreateGraphics();
                            x_MouseDown_2 = e.X;
                            y_MouseDown_2 = e.Y;
 
                            g.DrawLine(blackPen, x_MouseDown_1, y_MouseDown_1, e.X, e.Y);
                        }
                    }
                }
               
            }
            blackPen.Dispose();
        }
 
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            Graphics g = Graphics.FromImage(bmp);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            Pen blackPen = new Pen(Color.Black, size);
            x_MouseDown_2 = e.X;
            y_MouseDown_2 = e.Y;
            OffOn = false;
 
            if (LineOnOff == true)
            {
                CShape line = new CLine(x_MouseDown_1, y_MouseDown_1, e.X, e.Y);
                line.draw(ref g, true);
                ShapeArray.addShape(line);//добавление объекта в хранилище
            }
 
            x_MouseDown_1 = x_MouseDown_2 = y_MouseDown_1 = y_MouseDown_2 = -1;
            g.Dispose();
            blackPen.Dispose();
        }
 
//---------------------------------------------------------------------------------
 
 
public override void draw(ref Graphics g, bool hide)
        {
            Pen blackPen = new Pen(Color.Black, size);
            Pen whitePen = new Pen(Color.White, size);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            if (hide == true)
            {
                g.DrawLine(whitePen, p1.X, p1.Y, p2.X, p2.Y);
            }
            else
            {
            g.DrawLine(blackPen, p1.X, p1.Y, p2.X, p2.Y);
            }
            blackPen.Dispose();
            whitePen.Dispose();
        }
Помогите, пожалуйста( Язык изучаю недавно, во многих тонкостях не разбираюсь
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2012, 21:03
Ответы с готовыми решениями:

Рисование простых фигур в PictureBox
Возникла проблема рисования 6-угольной звезды. Простой шестиугольник я рисую такint kolichestvoVershun= 6; int DlinnaRebra =...

Рисование фигур на picturebox с использованием combobox
Допустим у меня есть Combobox. В нем 11 элементов (различные фигуры: круг, эллипс, прямоугольник, равнобедренный треугольник, квадрат,...

Растягивание пикселей в PictureBox
Привет. Гуглил, но что-то ничего не нашел, возможно кто-то подскажут. Как сделать, чтобы такое по размеру окно (смотрите в вложениях)...

6
 Аватар для DimanRu
721 / 712 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
08.03.2012, 10:45
Цитата Сообщение от Karkat Посмотреть сообщение
((PictureBox)sender).Refresh();
А если эту строчку убрать?
0
1 / 1 / 1
Регистрация: 26.12.2011
Сообщений: 46
08.03.2012, 10:50  [ТС]
Цитата Сообщение от DimanRu Посмотреть сообщение
А если эту строчку убрать?
Тогда при протягивании линии получается что-то вроде этого.
Причем при нажатии на поле оно тоже исчезает(
Миниатюры
Рисование на PictureBox - растягивание, перетаскивание фигур  
0
19 / 19 / 4
Регистрация: 08.03.2012
Сообщений: 72
08.03.2012, 20:51
В pictureBox1_MouseMove для линии измени на
C#
1
2
3
4
5
6
7
((PictureBox)sender).Refresh();
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
x_MouseDown_2 = e.X;
y_MouseDown_2 = e.Y;
g.DrawLine(blackPen, x_MouseDown_1, y_MouseDown_1, e.X, e.Y);
pictureBox1.Image = bmp;
0
1 / 1 / 1
Регистрация: 26.12.2011
Сообщений: 46
08.03.2012, 21:00  [ТС]
Цитата Сообщение от newclaus Посмотреть сообщение
В pictureBox1_MouseMove для линии измени на
Эффект такой же(
Вроде работает при таком варианте
C#
1
2
3
4
5
((PictureBox)sender).Refresh();
Graphics g = ((PictureBox)sender).CreateGraphics();
x_MouseDown_2 = e.X;
y_MouseDown_2 = e.Y;
g.DrawLine(blackPen, x_MouseDown_1, y_MouseDown_1, e.X, e.Y);
0
19 / 19 / 4
Регистрация: 08.03.2012
Сообщений: 72
09.03.2012, 10:11
Держи, поможет. Пароль в проге 1234
Вложения
Тип файла: rar Paint.rar (263.3 Кб, 523 просмотров)
6
167 / 106 / 30
Регистрация: 19.01.2013
Сообщений: 847
11.10.2014, 21:40
newclaus, Спасибо.(+1 поставил ) Хоть посмотрю как надо писать полноценный проект , а то я уже до ручки дошёл. А можно ещё и документацию на него?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.10.2014, 21:40
Помогаю со студенческими работами здесь

Перетаскивание picturebox
Пишу аналог paint. реализовываю функцию копировать выделенное и затем вставить. при вставке создаю внутри главного picturebox новый и в...

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

Перетаскивание формы за pictureBox
Всем привет! В общем вопрос в названии темы... Как осуществить перетаскивание формы за pictureBox? Есть ли решение? В C# новичок... да и...

Перетаскивание формы за PictureBox
Я перетаскиваю форму за пикчербокс, но она не хочет: private: System::Void pictureBox5_MouseDown(System::Object^ sender,...

Перетаскивание мышью объекта Picturebox
собственно есть код: //Создаем random для появления объектов Picturebox в случайных местах формы Random r = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru