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

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

21.12.2016, 22:45. Показов 2817. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru