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

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

11.04.2023, 13:42. Показов 669. Ответов 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
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 и y как рассчитать не понятно? Например ...

5
2394 / 1923 / 763
Регистрация: 27.07.2012
Сообщений: 5,567
11.04.2023, 14:34
Цитата Сообщение от nemajor Посмотреть сообщение
не знаю как осуществить стирание промежуточных линий
На каждый вызов MouseMove надо полностью перерисовывать картинку. Т.е. стирать всё и рисовать новый прямоугольник.
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 4
11.04.2023, 15:19  [ТС]
Нужно произвольное количество прямоугольников, уже пробовал это)
и можно просто в if закинуть Graphics.Clear
При помощи DrawRectangle и Pen(Color.White, 1)
0
2394 / 1923 / 763
Регистрация: 27.07.2012
Сообщений: 5,567
11.04.2023, 15:54
Цитата Сообщение от nemajor Посмотреть сообщение
Нужно произвольное количество прямоугольников
Значит надо запоминать в какой-нибудь коллекции ранее нарисованные прямоугольники и перерисовывать их каждый раз.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3429 / 2748 / 575
Регистрация: 04.09.2018
Сообщений: 8,626
Записей в блоге: 3
11.04.2023, 19:51
Цитата Сообщение от John Prick Посмотреть сообщение
Значит надо запоминать в какой-нибудь коллекции ранее нарисованные прямоугольники и перерисовывать их каждый раз.
Значит лучше заюзать событие формы Paint(), которое перерисует только новые точки (объекты).
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 4
12.04.2023, 11:31  [ТС]
Решил эту проблему, теперь беда, продолжает "Стирать" лишний контур после определения фигуры, использовать событие 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.04.2023, 11:31
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru