0 / 0 / 0
Регистрация: 02.05.2016
Сообщений: 36

Удаление отрисованных на форме линий

03.02.2017, 03:46. Показов 4033. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Помогите с программой.

Есть форма, на ней 2 кнопки. При нажатии на первую кнопку должны выводится на форму линии (пока фиксированное количество, в последствии их количество будет меняться)
Примерно так выводятся линии:
C#
1
2
3
Graphics g = this.CreateGraphics();
            g.DrawLine(new Pen(Color.Red), 0, 0, 50, 50);
            g.DrawLine(new Pen(Color.Black), 40, 20, 100, 150);
Вторая кнопка должна удалять эти линии.
Я сделал это через:

C#
1
this.Refresh();
Только вот проблема в том что с формы они пропадают но в памяти похоже они остаются (при многократном повторении вывода линий на форму и её перерисовки память потребляемая данным процессом увеличивается, что не есть хорошо).
Есть ли способ удалять их по другому?
И как удалить линии (и другие графические объекты)созданные только этой кнопкой (т.к. на форме могут присутствовать и другие графические объекты)?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2017, 03:46
Ответы с готовыми решениями:

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

Прорисовка линий на форме (WPF)
Пишу курсач по прорисовке трасс на форме. В БД таблицы: Точки(код,х,у), Сегмент(код,Точка начала, Точка конца), Трасса(код, точка начала,...

Прорисовка и удаление линий
Нужна помощь!!! создаю несколько динамических объектов (TButton), между ними провожу линии (делаю связь), нужно чтобы при движении одного...

2
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
03.02.2017, 10:35
Stud_force, так дела не делаются. По нажатию кнопки эти линии должны добавляться в какой-нибудь список, а затем вызываться метод Invalidate(). Прорисовка же должна происходить централизованно по событию Paint. Тогда удалением линии будет являться её извлечение из списка с последующим вызовом Invalidate(). Вот примитивный вариант формы:
Кликните здесь для просмотра всего текста
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
class MainForm: Form
{
    private List<Point> _linePoints = new List<Point>();
    private Random _random = new Random();
    
    public MainForm()
    {
        base.DoubleBuffered = true;
        
        Click += (s, a) =>
        {
            var mouse = a as MouseEventArgs;
 
            if (mouse.Button == MouseButtons.Left)
            {
                Point from = GetRandomPoint();
                Point to = GetRandomPoint();
                _linePoints.Add(from);
                _linePoints.Add(to);
                Invalidate();
                return;
            }
 
            if (mouse.Button == MouseButtons.Right)
            {
                if (_linePoints.Count > 1)
                {
                    _linePoints.RemoveRange(_linePoints.Count - 2, 2);
                    Invalidate();
                }
            }
        };
 
        Paint += (s, a) =>
        {
            if (_linePoints.Any())
            {
                a.Graphics.SmoothingMode = SmoothingMode.HighQuality;
 
                for (int i = 0; i < _linePoints.Count - 1; i += 2)
                {
                    a.Graphics.DrawLine(Pens.Red, _linePoints[i], _linePoints[i + 1]);
                }
            }
        };
    }
    
    private Point GetRandomPoint()
    {
        int x = _random.Next(10, 200);
        int y = _random.Next(10, 200);
        
        return new Point(x, y);
    }
}
1
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
03.02.2017, 11:36
Соединить несколько PictureBox линией
Рисование в Panel - Сохранение рисунка

Добавлено через 11 минут
Цитата Сообщение от Stud_force Посмотреть сообщение
Только вот проблема в том что с формы они пропадают но в памяти похоже они остаются (при многократном повторении вывода линий на форму и её перерисовки память потребляемая данным процессом увеличивается, что не есть хорошо).
Рисовать нужно в переопределенном OnPaint(), память у Вас жрет 100% из за того что вы не освобождаете ресурсы, всякие Pen, SolidBrush и тп по завершению их использования делать Dispose() нужно или использовать using https://msdn.microsoft.com/ru-... 98w02.aspx

Да и на счет Вашего refresh() - вот почитайте.
https://msdn.microsoft.com/ru-... .110).aspx
https://msdn.microsoft.com/ru-... .110).aspx
https://msdn.microsoft.com/ru-... .110).aspx
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2017, 11:36
Помогаю со студенческими работами здесь

Удаление горизонтальных линий
Уважаемые форумчане, такая проблема: в документе .doc (Word-2007) в некоторых местах появлились горизонтальные линии на всю страницу от...

Удаление линий с канвы
Рисуя на канве с помощью pen'а можно ли программно удалить созданные линии лишь выбранного цвета. Так у меня построены две линии синего и...

Рисование резиновых линий на неактивной форме
прошу прощения, никак не могу решить задачу: есть форма, на ней - Picture1 как сделать так, чтобы при проходе курсора мыши над...

Удаление невидимых линий(Z-буфер)
Здравствуйте! С графикой не знаком, а нужно нарисовать сложную 3D фигуру: 1)с удалением невидимых линий 2)со светом; решил попробовать...

Удаление невидимых линий и поверхностей
1.Представить тело (рисунок) как совокупность выпуклых многогранников. 2.Составить программу для создания файла данных, описывающих тело....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru