Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126

Как сделать так, чтобы линия "тянулась" за мышью?

27.10.2019, 04:34. Показов 7390. Ответов 25

Студворк — интернет-сервис помощи студентам
Доброго времени суток! При написании графического редактора столкнулся с проблемой, никак не получается решить.
В общем линия у меня рисуется в локальных координатах открытого изображения (нужно именно так), за мышкой тянется, но прорисовывается каждый шаг движения мыши, а мне нужно удалить только что нарисованное и нарисовать линию заново при событии MouseMove. Метод Clear не помогает, так как линия должна идти поверх открытого рисунка, а не на однородном фоне.
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
        private void zoomPictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                {
                    //открытый рисунок
                    canvas = new Bitmap(zoomPictureBox1.Image); 
                    // холст для рисования линии
                    canvas2 = new Bitmap(zoomPictureBox1.Image.Width, zoomPictureBox1.Image.Height);
                    //стртовая точка в локальных координатах открытого изображения
                    StartPositionLassoScreen = new Point(zoomPictureBox1.ClientToImagePoint(e.Location).X,
                        zoomPictureBox1.ClientToImagePoint(e.Location).Y);
                    //признак начала рисования
                    pressedLasso = true;
                }
        }
 
        private void zoomPictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (pressedLasso)
                {
                    canvas2 = canvas;
                    Graphics graph = Graphics.FromImage(canvas2);
                    //-----------------------------------------------------
                    // Здесь нужно удалить только что нарисованное, если оно есть, но не трогать открытый рисунок...
                    //graph.Clear(Color.Empty); //так работает, но открытый рисунок исчезает
                    //-----------------------------------------------------
                    //вторая точка линии (тянется за курсором)
                    NextPositionLassoScreen = zoomPictureBox1.ClientToImagePoint(e.Location);
                    //метод рисования линии попиксельно
                    Bresenham_Line(graph, Color.Violet,
                        (int)(StartPositionLassoScreen.X), (int)(StartPositionLassoScreen.Y),
                        (int)(NextPositionLassoScreen.X), (int)(NextPositionLassoScreen.Y));
                    zoomPictureBox1.UpdateImage(canvas2);
                }
Помогите, пожалуйста, решить данную проблему. Может быть можно как-то очистить графику не цветом, а рисунком? Очень нужно...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2019, 04:34
Ответы с готовыми решениями:

Сделать так, чтобы линия "тянулась" за курсором мыши
Делаю маленький граф редактор. По щелчку мыши задаются начальные координаты, по отпусканию -конечные. Как сделать чтобы как в графических...

Как сделать так, чтобы в анимации за точкой рисовалась линия
Как сделать так,чтобы в анимации за точкой рисовалась линия?

Как сделать так, чтобы линия разрыва страницы НЕ ПРОХОДИЛА через объединенные ячейки?
Братья и сёстры, кто подскажет - как сделать так, чтобы линия разрыва страницы НЕ ПРОХОДИЛА через объединенные ячейки? Буду очень благодарен

25
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
29.10.2019, 18:09  [ТС]
Студворк — интернет-сервис помощи студентам
ashsvis, для чистоты эксперимента просто создал новый проект только с этим инструментом (+ там еще кастомный контрол). И тоже не работает countPointLasso++
Вложения
Тип файла: zip WindowsFormsApp24.zip (641.3 Кб, 6 просмотров)
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
29.10.2019, 18:27
Цитата Сообщение от Keramer82 Посмотреть сообщение
не работает countPointLasso++
У меня Ваш проект работает:
1
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
29.10.2019, 19:49  [ТС]
У меня срабатывает, только если перетащить окно программы...

Добавлено через 2 минуты
ashsvis, получается при MouseDown нужно перерисовать всю форму, да?
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
29.10.2019, 19:52
Keramer82, я ничего не перетаскивал, как запустилось, так и попробовал.
Единственное, сначала с помощью меню загрузил картинку, а без этого ошибку выдавало.
1
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
29.10.2019, 20:12  [ТС]
ashsvis, странно как-то... У меня не хочет работать, зараза такая.
Миниатюры
Как сделать так, чтобы линия "тянулась" за мышью?  
0
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
29.10.2019, 21:03  [ТС]
ashsvis, пока решил добавлением в MouseMove
C#
1
this.Refresh();
но все же как-то странно... А может это как-то зависеть от версии Visual Studio? У меня 2017.

Добавлено через 10 минут
После некоторого размышления (все-таки обновлять форму на каждое движение мыши, мне кажется, не очень хорошее решение), поставил
C#
1
this.Refresh();
в MouseDown. Постоянный показ координат курсора мыши этого не стоит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.10.2019, 21:03

Когда двигается фон, то линия рамки тянется за ним. Как это убрать? И сделать так, чтобы рамки не было
from graph import * def gusenica(): brushColor("cornflowerblue") rectangle(0,y+0,400,y+400) brushColor("olive") ...

Как сделать так, чтобы при нажатии мышью на верхний квадратик над столбцом, он выбирал верхний закрашенный
Здравствуйте. Как сделать так, чтобы при нажатии мышью на верхний квадратик над столбцом, он выбирал верхний закрашенный шарик, и после...

Сделать так, чтобы форма не двигалась когда берут её мышью за название
здравствуйте, собственно сабж, Ворд ВБА, спасибо

Не знаю как сделать так чтобы как сделать так чтобы через каждые N строк таблицы выдача результатов останавливалась
from math import * a = -5 b = 10 up = 0.2 N = 15 x = a min_x = a max_x = b while a <= b: y = sin(x) + abs(sin(x))

Сделать так, чтобы при щелчке мышью на одной из фигурок управление передавалось на эту фигуру
здравствуйте, надеюсь на помощь, вопрос такой Дано игровое поле на катором расположено 20 фигурок (поле сделано в графическом редакторе),...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru