Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/55: Рейтинг темы: голосов - 55, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 6
.NET 4.x

Графический редактор C#

20.11.2019, 22:52. Показов 10411. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте, задали такое задание, написать графический редактор, писать надо с элементами ООП, то есть показать наследование, программа должна состоять из нескольких классов и т. д. Так вот, проблема в том что у меня есть класс формы
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
public partial class Form1 : Form
    {
        public Graphics graph;
        public bool moving = false;
        Pen pen;
        public Form1()
        {
            InitializeComponent();
            graph = pictureBox1.CreateGraphics();
            pen = new Pen(Color.Black, 1);
            graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            pen.StartCap = pen.EndCap = System.Drawing.Drawing2D.LineCap.Round;
        }
        public int X = 0;
        public int Y = 0;
        public float size = 0;
        public Color colorFig = Color.Black;
        bool drawSquare = false;
        bool drawRectangle = false;
        bool drawCircle = false;
        bool drawPen = true;
        string color = "";
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            moving = false;
            X = 0;
            Y = 0;
        }
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            moving = true;
            X = e.X;
            Y = e.Y;
            if (drawSquare)
            {
                Square square = new Square();
                square.DrawSquare(sender,e);
                /*SolidBrush sb = new SolidBrush(colorFig);
                graph.FillRectangle(sb, e.X, e.Y, size, size);*/
            }
        }
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (moving && X != 0 && Y != 0 && drawPen)
            {
                graph.DrawLine(pen, new Point(X, Y), e.Location);
                X = e.X;
                Y = e.Y;
             }
        }
        private void btn_PenColor_Click(object sender, EventArgs e)
        {
            //открытие ColorDialog и установка заднего фона на btn_PenColor если пользователь нжимает на ОК
            ColorDialog c = new ColorDialog();
            if (c.ShowDialog() == DialogResult.OK)
            {
                btn_PenColor.BackColor = c.Color;
                pen.Color = c.Color;
                colorFig = c.Color;
            }
        }
        private void cmb_PenSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            pen.Width = Convert.ToInt32(cmb_PenSize.Text);
        }
       
 
        private void Clear_Click(object sender, EventArgs e)
        {
            graph.Clear(SystemColors.Window);
        }
 
        private void btn_Square_Click(object sender, EventArgs e)
        {
            size = Convert.ToSingle(txt_Size.Text);
            drawSquare = true;
            drawCircle = false;
            drawRectangle = false;
            drawPen = false;
        }
 
        private void label2_Click(object sender, EventArgs e)
        {
            drawPen = true;
        }
 
        private void btn_Rectangle_Click(object sender, EventArgs e)
        {
            size = Convert.ToSingle(txt_Size.Text);
            drawRectangle = true;
            drawSquare = false;
            drawCircle = false;
            drawPen = false;
        }
 
        private void btn_Circle_Click(object sender, EventArgs e)
        {
            size = Convert.ToSingle(txt_Size.Text);
            drawCircle = true;
            drawSquare = false;
            drawRectangle = false;
            drawPen = false;
        }
    }
И есть класс квадрат, который должен рисовать квадрат на pictureBox1. Но он не рисует, пробовал отнаследовать от формы, создавал объект Form1 и через него пытался достучаться до переменных, но все равно не рисует, но если вместо вызова функции из класса квадрат (по средством объекта данного класса) написать код, который указан в комментариях, то он рисует. В чем проблема и как можно это все реализовать?
Класс квадрата:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace OOPKursovoi
{
    public class Square
    {
        Form1 form = new Form1();
        public void DrawSquare (object sender, MouseEventArgs e)
        {
            //используем Solid Brush для заливки графических фигур
            SolidBrush sb = new SolidBrush(form.colorFig);
            //установка одинаковой высоты и ширины для квадрата
            //получаем значение ширины и длины из Textbox(txt_ShapeSize)
            form.graph.FillRectangle(sb, e.X, e.Y, form.size, form.size);
            //установка начальной точки и размещение квадрата в false для создания фигуры одним щелчком мыши
        }
    }
}
P.S. библиотеки подключены одинаковые и там и там.
Вложения
Тип файла: rar OOPKursovoi.rar (179.6 Кб, 140 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2019, 22:52
Ответы с готовыми решениями:

Графический редактор
Запуталась совсем что натворила (( Хотела создать что то вреде Paint но запуталась что творю . Рисует одновременно все фигуры( Не...

Графический редактор
рисую елементарные примитив (к примеру прямоугольник) в MouseDown запоминаю начальные координаты , в MouseMove осуществляю прорисовку...

Графический редактор на С#
Можете выложить пример графического редактора типапаинт на си шарп. Р.S Не выкладывайте исходники паинт нета!

3
135 / 130 / 60
Регистрация: 16.06.2013
Сообщений: 527
24.11.2019, 04:34
Сударь, как вы вообще умудрились до курсового доучиться? Сделанные косяки выдают полное непонимание предмета работы. Я даже не знаю с чего начать перечисление ошибок. У вас сам принцип использования классов некорректен.
1. Снести всё уже написанное - это лютая дичь.
2. Сесть за тетрадку, и нарисовать общую схему классов проекта - какие они будут, где будут использоваться, зачем они нужны, кому будут наследовать, и от кого будут наследоваться. А, раз уж задание такое расплывчатое - извращаться можно по максимуму. Чисто навскидку:
- Создаём класс Figure. Он будет содержать базовые параметры, такие как координаты, высоту и ширину фигуры. Ещё можно добавить цвет заливки и цвет обводки.
- От него наследуем классы разных конкретных фигур - круга, линии, квадрата и т.п. Дочерние классы по сути будут просто отрисовывать на предоставленном полотне фигуру.
- Создаём класс Canvas. Это будет полотно рисования, в котором будет список фигур и метод перерисовки. Плюс - методы добавления или удаления фигуры из списка.
3. В классе формы создаём и инициализируем экземпляр класса Canvas. Делаем всякие рюшечки для выбора фигуры цвета и т.п. Ну и дописываем само рисование, которое будет заключаться в добавлении фигуры в список, при отпускании кнопки мыши. Ну и перерисовку Canvas.

То что написано выше - это крайне примерный план того как нужно эту задачу выполнять.

А, ну и чисто вдогонку. Не рисуется квадрат у вас потому, что вы при каждой инициализации класса Square создаёте новый экземпляр формы (который просто не отображается, т.к. не был вызвае form.Show()), на котором и рисуете свой квадрат.
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
24.11.2019, 11:51
Лучший ответ Сообщение было отмечено Thero3 как решение

Решение

Thero3, почитайте эту тему: Ответы на 7 самых частых вопроса по WinForms а конкретнее пункт 2 там идёт повествование о 2 формах, но часть можно применить и в Вашем случае. Но как минимум если совсем много не переделывать то метод DrawSquare должен принимать ссылку на форму в которой нужно рисовать, но никак эта форма не должна создаваться в заново в классе квадрата.
1
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
24.11.2019, 12:32
Цитата Сообщение от Thero3 Посмотреть сообщение
написать графический редактор, писать надо с элементами ООП
Читайте сюда: Простой векторный графический редактор (разбор полётов)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2019, 12:32
Помогаю со студенческими работами здесь

Графический редактор
Мне задали Лабу.Графический редактор.Вот содержание лабы. В конце дано задание из 6 пунктов.Помогите реализовать пункт номер 4. /// ...

Графический редактор
Помогите пожалуйста.Графический редактор. Напишите программу - редактор графики, аналог Paint. Добавьте инструменты "Кисть",...

Графический редактор
Ребята, подскажите как реализовать рисование прямоугольника как в Paint. т.е. пока левая кнопка зажата, прямоугольник можно двигать, а...

Графический редактор
Хочу написать графический редактор в C#. Встал вопрос о панели инструментов. В фотошопе эта панелька висит слева, открывается синхронно с...

Графический редактор
Здраствуйте. Подскажите пожайлуста как можно осуществить следующие. Я хочу написать простенький графический редактор. Как сделать карандаш?...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru