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

Рисование прямоугольников под управлением мышью

11.04.2023, 13:42. Показов 544. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Прямоугольники рисуются, все ок, но , не знаю как осуществить стирание промежуточных линий. То есть, необходимо стирать контур предыдущего вызова обработчика.

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
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 lab2
{
    public partial class Form2 : Form
    {
        int x, y, x1, y1;
        Graphics g;
        bool press = false;
        bool btw = false;
        Pen pen, pen1;
 
        public Form2()
        {
            InitializeComponent();
        }
 
        private void Form2_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                g = CreateGraphics();
                press = true;
                x = e.X;
                y = e.Y;
            }
        }
 
        private void Form2_MouseMove(object sender, MouseEventArgs e)
        {
            pen = new Pen(Color.Black, 3);
            pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
            pen1 = new Pen(Color.White, 1);
            if (press)
            {
                x1 = e.X;
                y1 = e.Y;
                if (x < x1 && y < y1)
                { 
 
                    g.DrawRectangle(pen, new Rectangle(x, y, x1-x, y1-y));
                    g.DrawRectangle(pen1, new Rectangle(x, y, x1 - x, y1 - y));
                }
                else if (x > x1 && y > y1 )
                {
                    g.DrawRectangle(pen, new Rectangle(e.X, e.Y,Math.Abs(e.X - x), Math.Abs(e.Y - y)));
                }
                else if(x > x1 && y < y1)
                {
                    g.DrawRectangle(pen, new Rectangle(e.X, y, Math.Abs(e.X - x), y1 -y));
                }
                else if(x < x1 && y > y1)
                {
                    g.DrawRectangle(pen, new Rectangle(x, e.Y, x1-x, Math.Abs(e.Y - y)));
                }
            }
        }
 
        private void Form2_MouseUp(object sender, MouseEventArgs e)
        {
            press = false;
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2023, 13:42
Ответы с готовыми решениями:

Реализоваться рисование на форме равносторонних треугольников под управлением мыши
Всем привет! Дано следующее задание, помогите разобраться: &quot;Реализоваться рисование на форме...

Рисование прямоугольников мышью
Доброго времени суток. Я написал программу рандомного создания прямоугольников в Panel, но мне...

Перемещение прямоугольников в Visio мышью
В Visio написал макрос хочу либо с помошью drop или move переместить прямоугольники . позиции по x...

Рисование мышью
Доброго времени суток. Помогите мне в одной проблеме. Мне нужно рисовать QGraphicsItem объекты в...

Рисование мышью
Как сделать так чтобы при зажатой клавиши мышки ведя по форме за курсором появлялась линия? я...

5
2338 / 1828 / 753
Регистрация: 27.07.2012
Сообщений: 5,410
11.04.2023, 14:34 2
Цитата Сообщение от nemajor Посмотреть сообщение
не знаю как осуществить стирание промежуточных линий
На каждый вызов MouseMove надо полностью перерисовывать картинку. Т.е. стирать всё и рисовать новый прямоугольник.
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 4
11.04.2023, 15:19  [ТС] 3
Нужно произвольное количество прямоугольников, уже пробовал это)
и можно просто в if закинуть Graphics.Clear
При помощи DrawRectangle и Pen(Color.White, 1)
0
2338 / 1828 / 753
Регистрация: 27.07.2012
Сообщений: 5,410
11.04.2023, 15:54 4
Цитата Сообщение от nemajor Посмотреть сообщение
Нужно произвольное количество прямоугольников
Значит надо запоминать в какой-нибудь коллекции ранее нарисованные прямоугольники и перерисовывать их каждый раз.
0
Эксперт JavaЭксперт по электронике
 Аватар для wizard41
3136 / 2263 / 555
Регистрация: 04.09.2018
Сообщений: 7,550
Записей в блоге: 3
11.04.2023, 19:51 5
Цитата Сообщение от John Prick Посмотреть сообщение
Значит надо запоминать в какой-нибудь коллекции ранее нарисованные прямоугольники и перерисовывать их каждый раз.
Значит лучше заюзать событие формы Paint(), которое перерисует только новые точки (объекты).
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 4
12.04.2023, 11:31  [ТС] 6
Решил эту проблему, теперь беда, продолжает "Стирать" лишний контур после определения фигуры, использовать событие Paint нельзя. На скрине видно, где синим цветом, это "стирание" контура
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
namespace lab2
{
    public partial class Form2 : Form
    {
        int x, y, x1, y1,x2,y2;
        Graphics g;
        bool IsDraw = false;
        Pen pen,pw;
 
        public Form2()
        {
            InitializeComponent();
        }
 
        private void Form2_MouseDown(object sender, MouseEventArgs e)
        {
            
            if (e.Button == MouseButtons.Left)
            {
                x = e.X;
                y = e.Y;
                IsDraw = true;
                g = CreateGraphics();
            }
        }
 
        private void Form2_MouseMove(object sender, MouseEventArgs e)
        {
            
            
            
            if (IsDraw)
            {
                x2 = e.X;
                y2 = e.Y;
                pen = new Pen(Color.Black, 3);
                pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
                pw = new Pen(Color.White, 3);
                if (x < x2 && y < y2)
                {
                    g.DrawRectangle((Pen)pw, x, y, x1 - x, y1 - y);
                    x1 = e.X;
                    y1 = e.Y;
                    g.DrawRectangle((Pen)pen, x, y, x2 - x, y2 - y);
                }   
            }
        }
 
        private void Form2_MouseUp(object sender, MouseEventArgs e)
        {
            
            if (IsDraw)
            {
                pen = new Pen(Color.Black, 3);
                g.DrawRectangle(pw,x,y,x1-x,y1-y);
                g.DrawRectangle(pen, x, y, x1 - x, y1 - y);
            }
            IsDraw  = false;
        }
    }
}
Миниатюры
Рисование прямоугольников под управлением мышью   Рисование прямоугольников под управлением мышью  
0
12.04.2023, 11:31
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.04.2023, 11:31
Помогаю со студенческими работами здесь

Рисование мышью
Всем привет. Написал прогу для рисования мышью (пока только прямые линии) на c++ (MS VS 2005)....

Рисование линии мышью
Собственно не могу понять, почему не работает. Код взял с msdn. Подумал, что, может, ручка белого...

Рисование линии мышью
При нажатии клавиши мыши должно начаться рисование линии: if (InputEvent.BUTTON1_MASK) { ...

Canvas, рисование мышью
Добрый вечер, товарищи. Собственно, не так давно я решил познакомиться поближе с JavaFX, и в...

Не работает рисование мышью
Я использую библиотеку &quot;Future Library 3.50&quot; для работы мыши. Вот программа на тему мыши: REM...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Откуда у float лишние цифры в конце дробной части. Представление чисел с плавающей точкой
bytestream 25.01.2025
При разработке программного обеспечения часто возникает необходимость работать с вещественными числами, которые содержат дробную часть. В современных компьютерных системах такие числа представляются. . .
Как использовать глобальную переменную в функции в Python
bytestream 25.01.2025
В программировании на Python глобальные переменные представляют собой особый тип переменных, которые доступны для использования во всех частях программы, включая различные функции, классы и модули. . . .
Как в цикле обойти все элементы map в Java
bytestream 25.01.2025
В разработке на Java одной из наиболее востребованных структур данных является интерфейс Map, который предоставляет эффективный способ хранения и управления парами "ключ-значение". Разработчики. . .
Для чего нужен UserManager.isU­serAGoat(­) в Android и как это использовать
bytestream 25.01.2025
В мире Android-разработки существует множество интересных и порой загадочных функций, о которых знают далеко не все разработчики. Одной из таких функций является метод UserManager. isUserAGoat(),. . .
Как обойти масси в JavaScript. Всё о циклах
bytestream 25.01.2025
JavaScript представляет собой мощный язык программирования, широко используемый в веб-разработке, где массивы и циклы являются фундаментальными концепциями для эффективной работы с данными. Массив в. . .
Как сделать, чтобы существующая ветка отслеживала удалённую в Git. Связывание локальных и удалённых веток
bytestream 25.01.2025
В разработке программного обеспечения системы контроля версий стали неотъемлемой частью процесса создания качественного программного продукта. Эти инструменты позволяют разработчикам эффективно. . .
Как проверить, что файл НЕ существует с помощью Bash
bytestream 25.01.2025
В системном администрировании проверка существования файлов является фундаментальной операцией, особенно при написании скриптов на Bash. Правильная обработка ситуаций, когда файл отсутствует,. . .
Как проверить, что строка пустая, неопределена или null в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript разработчики регулярно сталкиваются с необходимостью проверки строковых значений на различные состояния. Валидация данных является критически важным. . .
Как проверить существование ключа в объекте или массиве в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript программисты постоянно сталкиваются с необходимостью работать с объектами и массивами. Эти структуры данных являются фундаментальными элементами языка и. . .
Как создать ArrayList из массива (array) в Java
bytestream 25.01.2025
При разработке программного обеспечения на языке Java программисты часто сталкиваются с необходимостью эффективного управления наборами данных. Массивы и ArrayList являются двумя фундаментальными. . .
Как сгенерировать случайные целые числа (int) в указанном диапазоне в Java
bytestream 25.01.2025
В программировании генерация случайных чисел является важнейшим инструментом для решения множества практических задач. От создания игровых механик до реализации алгоритмов машинного обучения, от. . .
Как сделать, чтобы grep выводил строки до и после найденной
hw_wired 25.01.2025
Утилита grep стала незаменимым инструментом для поиска и фильтрации информации в Unix-подобных операционных системах. Эта командная утилита позволяет осуществлять поиск строк, соответствующих. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru