Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
116 / 116 / 42
Регистрация: 27.02.2013
Сообщений: 899

Отрисовка закрашенных фигур

21.12.2016, 22:45. Показов 2851. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер! Рисую на элементе chart прямоугольники и столкнулся с проблемой закрашивания. Как можно сделать, чтобы нарисовав прямоугольник и начав рисовать другой, предыдущей треугольник оставался закрашенным?

Ниже предоставляю код, как рисую прямоугольники:
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
        Point startPos;      // mouse-down position
        Point currentPos;    // current mouse position
        bool drawing;        // busy drawing
        List<Rectangle> rectangles = new List<Rectangle>();  // previous rectangles
        private bool drawRect = false;
 
         private Rectangle getRectangle()
         {
            return new Rectangle(
                Math.Min(startPos.X, currentPos.X),
                Math.Min(startPos.Y, currentPos.Y),
                Math.Abs(startPos.X - currentPos.X),
                Math.Abs(startPos.Y - currentPos.Y));
         }
 
         private void chart1_MouseDown(object sender, MouseEventArgs e)
         {
                currentPos = startPos = e.Location;
                drawing = true;
         }
 
        private void chart1_MouseMove(object sender, MouseEventArgs e)
        {
                currentPos = e.Location;
                if (drawing) chart1.Invalidate();
         }
 
         private void chart1_MouseUp(object sender, MouseEventArgs e)
        {
                 if (drawing)
                {                  
                    drawing = false;
                    var rc = getRectangle();
                    if (rc.Width > 0 && rc.Height > 0) rectangles.Add(rc);               
                    chart1.Invalidate();
                }
         }
 
        SolidBrush brush = new SolidBrush(Color.FromArgb(15, Color.Black));
        private void chart1_Paint(object sender, PaintEventArgs e)
        {
            if (drawRect == true)
            {
               
                if (rectangles.Count > 0)
                {
                    e.Graphics.DrawRectangles(Pens.Black, rectangles.ToArray());
                }
                if (drawing)
                {
                    e.Graphics.DrawRectangle(Pens.Red, getRectangle());
                }
        
                e.Graphics.FillRectangle(brush, getRectangle());
 
            }
        }
 
        private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
        {
            var cg = e.ChartGraphics;
            var brush = new SolidBrush(Color.FromArgb(15, Color.Black));
           cg.Graphics.FillRectangle(brush, getRectangle());
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2016, 22:45
Ответы с готовыми решениями:

Вывести на форму рисунок, состоящий из различных объектов, не закрашенных и закрашенных полностью
напишите пожалуйста код и результат Изучите справки MSDN1 методы и свойства классов Graphics, Color, Pen и SolidBrush. Создайте...

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

Отрисовка нескольких фигур
Нарисовать одну фигуру проблем нет ,а вот как нарисовать несколько? И так что бы они не появлялись в одной и той же координате. Например...

15
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
22.12.2016, 01:14
Не понятно, что хотите.
0
26 / 26 / 13
Регистрация: 01.07.2016
Сообщений: 105
22.12.2016, 02:05
Цитата Сообщение от Sanya_sa Посмотреть сообщение
Не понятно, что хотите.
Человек хочет чтобы прямоугольники не пропадали =)
0
116 / 116 / 42
Регистрация: 27.02.2013
Сообщений: 899
22.12.2016, 07:16  [ТС]
Sanya_sa, нужно было, так: рисую прямоугольник, все ништяк, цвет есть, как начинаю рисовать другой, залиска становится белой. никак не получается сделать, так чтобы оставался с заливкой, мучал FillRectangle. Приложу скрин, как сейчас выходит
Миниатюры
Отрисовка закрашенных фигур  
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
22.12.2016, 08:35
blackstar, ну так правильно, Вы же ОДИН и заливаете).
Если хотите что бы несколько залились нужно каздый нарисованый сохранить в массив и массив отрисовывыт, как Вы это делаете 47 строке.
1
116 / 116 / 42
Регистрация: 27.02.2013
Сообщений: 899
22.12.2016, 20:48  [ТС]
Sanya_sa, если я сделаю так:
C#
1
2
3
4
5
                 if (rectangles.Count > 0)
                {
                    e.Graphics.DrawRectangles(Pens.Black, rectangles.ToArray());
                    e.Graphics.FillRectangle(brush, rectangles.ToArray());
                }
то у меня вылазит ошибка: не удается преобразовать из "System.Drawing.Rectangle[]" в "System.Drawing.RectangleF"

подскажите, как решить эту ошибку?
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
22.12.2016, 21:04
FillRectangles
1
116 / 116 / 42
Регистрация: 27.02.2013
Сообщений: 899
22.12.2016, 21:25  [ТС]
TopLayer, Sanya_sa, еще бы один момент решить, как реализовать их перестановку мышкой?
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
22.12.2016, 21:27
blackstar, Перемещение линии по оси х Тут есть пример перетаскивания линий. Добавить прямоугольники будет не сложно.
0
116 / 116 / 42
Регистрация: 27.02.2013
Сообщений: 899
22.12.2016, 21:49  [ТС]
TopLayer, а как можно попроще переделать, чтобы линии я сам рисовал, а не изначально задавал при загрузке формы?
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
22.12.2016, 22:12
blackstar, линии прямые?
0
116 / 116 / 42
Регистрация: 27.02.2013
Сообщений: 899
22.12.2016, 22:22  [ТС]
TopLayer, да... или, хотя как мне можно ваш пример подправить, чтобы работал в моем коде? подскажите, пожалуйста
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
22.12.2016, 22:41
blackstar, вместо событий формы использовать события chart1
0
116 / 116 / 42
Регистрация: 27.02.2013
Сообщений: 899
22.12.2016, 22:52  [ТС]
TopLayer, вопрос в другом, как мне их рисовать, добавляя в список (как у вас в примере) а затем при надобности смещать. Поэтому спросил, как ваш пример переделать,чтобы самому рисовать прямые, а не кодом чтобы задавались. А потом сам подгоню для прямоугольников
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
22.12.2016, 22:59
blackstar, ну у меня же запоминаются координаты последнего события MouseDown. Так же можно получить координаты при событии MouseUp. Соответственно по этим координатам и построить прямую и добавить в список.
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
23.12.2016, 09:16
Рисование на форме и перемещение по таймеру
Рисование в Panel - Сохранение рисунка

Добавлено через 1 минуту
Действие на графику
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2016, 09:16
Помогаю со студенческими работами здесь

Отрисовка фигур по нажатию кнопок
Здравствуйте! Возникла такая проблема: хочу чтобы по нажатию кнопки отрисовывалась фигура, заданная в классе. Можете подсказать на...

На экране нарисовать несколько произвольных закрашенных фигур
Добрый вечер, форумчане! Возникла пара вопросов при работе с нетипизированными файлами в Turbo Pascal 7.0 (а также и в 7.1). На...

Отрисовка фигур
Доброе время суток! Недавно начал знакомиться с Unity. Как в скрипте можно прописать деформацию той или иной фигуры? Например, если...

Отрисовка 3Д фигур
Добрый день! Есть сложность в программирование 3Д фигуры(куб). Подскажите порядок преобразований для отрисовки фигуры. В данный момент...

Неправильная отрисовка фигур
Доброй ночи! Прошу помочь разобраться с ошибкой в работе программы-рисовалки (WPF). &lt;InkCanvas x:Name=&quot;MyCanvas&quot;...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Настройка записи справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru