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

Сохранение цвета для фигур DrawPath

25.08.2015, 13:47. Показов 1984. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте все, помогите доделать сохранение цвета для фигур. Сейчас когда выбираю цвет перерисовываются в новый цвет все фигуры, а нужно только та что будет рисоватся. Вот код :
Кликните здесь для просмотра всего текста
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private readonly GraphicsPath path = new GraphicsPath();
 
        private Pen pen = new Pen(Color.Black, 25);
        Color color = new Color();
       
        Point pt1, pt2, pt3;
 
        static int click = 0; static int size = 8;
       
        bool line_flag = true; bool lin_flag = false;
        bool elipse_flag = false; bool el_flag = false;
        bool rec_flag = false; bool re_flag = false;
 
        public Form1()
        {
            InitializeComponent();
            text_box.Hide();
            DoubleBuffered = true;
            color = Color.Black;
        }
 
        private void FuncMouseDown(object sender, MouseEventArgs e)
        {
            pt1.X = e.X;
            pt1.Y = e.Y;
            
            if (line_flag) { el_flag = false; re_flag = false; lin_flag = true; path.StartFigure(); }
            if (elipse_flag) { lin_flag = false; re_flag = false;  el_flag = true; }
            if (rec_flag) { lin_flag = false; el_flag = false; re_flag = true; }
        }
 
        private void FuncMouseUp(object sender, MouseEventArgs e)
        {
            pt2.X = e.X;
            pt2.Y = e.Y;
 
            if (line_flag)
            {
                this.pen = new Pen(color);
                this.pen.Width = size;
                
                path.AddLine(pt1.X, pt1.Y, pt3.X, pt3.Y);
                lin_flag = false;
                path.CloseFigure();
            }
            if (elipse_flag)
            {
                path.AddEllipse(pt1.X, pt1.Y, (pt3.X - pt1.X), (pt3.Y - pt1.Y));
                el_flag = false;
            }
            if (rec_flag)
            {
                path.AddRectangle(new Rectangle(pt1.X, pt1.Y, (pt2.X - pt1.X), (pt2.Y - pt1.Y)));
                re_flag = false;
            }
        }
       
        protected void OnMouseMove(object sender, MouseEventArgs e)
        {
            pt3.X = e.X;
            pt3.Y = e.Y;
            
            Invalidate();
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            pen = new Pen(color);
            pen.Width = size;
 
 
            if (elipse_flag && el_flag)
            {
                e.Graphics.DrawEllipse(pen, pt1.X, pt1.Y, (pt3.X - pt1.X), (pt3.Y - pt1.Y));
            }
 
            if (line_flag && lin_flag)
            {
                e.Graphics.DrawLine(pen, pt1.X, pt1.Y, pt3.X, pt3.Y);
            }
 
            if (rec_flag && re_flag)
            {
                e.Graphics.DrawRectangle(pen, pt1.X, pt1.Y, (pt3.X - pt1.X), (pt3.Y - pt1.Y));
            }
 
            e.Graphics.DrawPath(pen, path);
            
        }
 
        private void Choose_Line(object sender, EventArgs e)
        {
            line_flag = true;
            elipse_flag = false;
            rec_flag = false;
        }
 
        private void Choose_Elipse(object sender, EventArgs e)
        {
            elipse_flag = true;
            line_flag = false;
            rec_flag = false;
        }
 
        private void Choose_Rect(object sender, EventArgs e)
        {
            rec_flag = true;
            line_flag = false;
            elipse_flag = false;
        }
 
        private void Choose_Color(object sender, EventArgs e)
        {
            ColorDialog Dialog = new ColorDialog();
            this.Invalidate();
            if (DialogResult.OK == Dialog.ShowDialog())
            {
                color = Dialog.Color;
            }
        }
 
        private void Choose_8(object sender, EventArgs e)
        {
            pen = new Pen(color);
            pen.Width = 8;
            size = 8;
        }
 
        private void Choose_12(object sender, EventArgs e)
        {
            pen = new Pen(color);
            pen.Width = 12;
            size = 12;
        }
 
        private void Choose_14(object sender, EventArgs e)
        {
            pen = new Pen(color);
            pen.Width = 14;
            size = 14;
        }
 
        private void Choose_16(object sender, EventArgs e)
        {
            pen = new Pen(color);
            pen.Width = 16;
            size = 16;
        }
 
        private void Add_Text(object sender, EventArgs e)
        {
            if (click == 0)
            {
                text_box.Show();
                click++;
            }
            else if (click > 0)
            {
                text_box.Hide();
                click = 0;
            }
        }
 
  
    }
}


Так же прикрепил архив с проектом. Спасибо!
Вложения
Тип файла: 7z WindowsFormsApplication1.7z (33.2 Кб, 4 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.08.2015, 13:47
Ответы с готовыми решениями:

Изобразить 5 различных геометрических фигур используя различные цвета для заливки и обводки
Изобразить 5 различных геометрических фигур используя различные цвета для заливки и обводки. Используя форму.

100 фигур случайного цвета
Составить программу, которая выводит на экран 100 фигур случайного цвета Окружность фиксированного радиуса со случайным центром.

Изображение фигур заданного цвета.
Составить программу, которая выводит на экран изображение двух геометрических фигур заданного цвета до индивидуального задания приведенном...

5
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
25.08.2015, 16:58
Вам нужно описать классы фигур, одним из полей будет цвет фигуры и все
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
25.08.2015, 17:34
Лучший ответ Сообщение было отмечено Gameer как решение

Решение

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Draw
{
    public partial class Form1 : Form
    {
        List<Figure> Figurs = new List<Figure>(); // фигуры
        Point MousePos = new Point(); // Координаты мыши
        Color ColorFigure = Color.Black; // Цвет фигуры
 
        public Form1()
        {
            InitializeComponent();
        }
 
        // 
        private void buttonL_Click(object sender, EventArgs e)
        {
            Figurs.Add(new Line(ColorFigure, MousePos, 50));
            Invalidate();
        }
 
        // 
        private void buttonE_Click(object sender, EventArgs e)
        {
            Figurs.Add(new Ellipse(ColorFigure, MousePos, 40));
            Invalidate();
        }
 
        //
        protected override void OnPaint(PaintEventArgs e)
        {
            foreach (var item in Figurs)
            {
                if (item is Line )
                {
                    e.Graphics.DrawLine(new Pen(item.ColrFigure), item.PositionFigure, new Point (200, 120));
                }
                else if (item is Ellipse)
                {
                    e.Graphics.DrawEllipse(new Pen(item.ColrFigure), new Rectangle(item.PositionFigure.X, item.PositionFigure.Y, ((Ellipse)item).Radius, ((Ellipse)item).Radius));
                }
            }
        }
 
        // 
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            MousePos = new Point(e.X, e.Y);
        }
 
        //
        private void buttonSetColor_Click(object sender, EventArgs e)
        {
            ColorDialog Dialog = new ColorDialog();
 
            if (DialogResult.OK == Dialog.ShowDialog())
                ColorFigure = Dialog.Color;
        }
    }
 
 
    abstract class Figure
    {
        public Color ColrFigure { set; get; }
        public Point PositionFigure { set; get; }
    }
 
    class Line : Figure
    {
        int Len;
 
        public Line(Color color, Point position, int len)
        {
            base.ColrFigure = color;
            base.PositionFigure = position;
            Len = len;
        }
    }
 
    class Ellipse : Figure
    {
        public int Radius;
 
        public Ellipse(Color color, Point position, int radius)
        {
            base.ColrFigure = color;
            base.PositionFigure = position;
            Radius = radius;
        }
    }
    
}

Думаю принцип понятен.
Вложения
Тип файла: 7z Draw.7z (30.0 Кб, 5 просмотров)
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,099
25.08.2015, 18:00
Цитата Сообщение от Sanya_sa Посмотреть сообщение
if (item is Line )
.............
а почему бы не научить фигуру рисовать себя?
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
25.08.2015, 18:08
Можно и научить не в этом суть. Вопрос был про возможность рисовать фигуры разными цветами.
1
0 / 0 / 1
Регистрация: 24.06.2014
Сообщений: 74
27.08.2015, 09:56  [ТС]
Точно нужно было, спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.08.2015, 09:56
Помогаю со студенческими работами здесь

Изменение цвета на пересечение двух фигур
Здравствуйте! В openGL я новичок, в связи эти прошу помощи. Программа разрабатывается на openGL ES 2.0, OS – Android, Java. Задача: В...

Шахматы. восемь фигур одного цвета
Задан вопрос по шахматам, можно ли расставить на доске восемь фигур одного цвета, чтобы они держали под обстрелом все 64 поля доски? ...

Можно ли указать для одной тени Box-shadow два цвета 50% для одного цвета 50% для другого?
Можно ли указать для одной тени два цвета 50% для одного цвета 50% для другого?

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

Вывести на экран изображения двух геометрических фигур заданного цвета
Составить программу, которая выводит на экран изображения двух геометрических фигур заданного цвета: фигура1: чёрный прямоугольник ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru