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

Перемещение мышкой нарисованных объектов

08.10.2011, 22:48. Показов 3679. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите мне пожалуйста. Мне нужно чтобы нарисованный в программе прямоугольник можно былобы перемещать мышкой. Всё бы хорошо, но самый начальный объект (прямоугольник после нарисовки) не исчезает. В результате на экране 2 прямоугольника - исходный и перемещённый...
посмотрите пожалуйста, что исправить в коде....
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
        bool doDraw; //проверяем что идёт рисование 
        bool fl; //проверяем что преобразование произошло
        bool move; // проверяем что идёт движение
        Point Beg, End;
        double A, B,C,D;
        Pen pen = new Pen(Color.Red);
        Rectangle myRect;
 
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            Graphics g = CreateGraphics();
            if (e.Button == MouseButtons.Left)
            {
                Beg = End = new Point(e.X, e.Y);
               
                g.DrawRectangle(pen, rect(Beg, End));
            
                doDraw = true;
            }
            if (e.Button == MouseButtons.Right)
            {
                if (e.X >= C && e.X <= C + A && e.Y >= D && e.Y <= D + B)
                {
                    g.DrawRectangle(pen, e.X, e.Y, (int)A, (int)B);
                    
                    move = true;
                }
            }
            g.Dispose();
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (doDraw)
            {
                Graphics g = CreateGraphics();
                g.DrawRectangle(pen, rect(Beg, End));
                End = new Point(e.X, e.Y);
                g.DrawRectangle(pen, rect(Beg, End));
                g.Dispose();
                Invalidate();
            }
            if (move)
            {
                Graphics g = CreateGraphics();
          
                g.FillRectangle(new SolidBrush(Color.Red), e.X, e.Y, (int)A, (int)B);
                g.Dispose();
                Invalidate();
            }
        }
 
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            Graphics g = CreateGraphics();
            if (doDraw && e.Button == MouseButtons.Left)
            {
                
                myRect = rect(Beg, new Point(e.X, e.Y));
                g.DrawRectangle(pen, myRect);
                g.Dispose();
                doDraw = false;
                Invalidate();
            }
            if (move && e.Button == MouseButtons.Right)
            {
                g.FillRectangle(new SolidBrush(Color.Red), e.X, e.Y,(int) A, (int)B);
                g.Dispose();
                move = false;
                C = e.X;
                D = e.Y;
                //Invalidate();
            }
         fl=true;
        }
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            if (fl)
                g.FillRectangle(new SolidBrush(Color.Red), myRect);
            if (doDraw)
                g.DrawRectangle(pen, rect(Beg, End));
        }
        Rectangle rect(Point Beg, Point End)
        {
            A = Math.Abs(Beg.X - End.X);
            B = Math.Abs(Beg.Y - End.Y);
            C=Math.Min(Beg.X, End.X);
            D = Math.Min(Beg.Y, End.Y);
            return new Rectangle(Math.Min(Beg.X, End.X), Math.Min(Beg.Y, End.Y), Math.Abs(Beg.X-End.X), Math.Abs(Beg.Y-End.Y));
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2011, 22:48
Ответы с готовыми решениями:

Перетаскивание мышкой нарисованных объектов
Доброго времени суток! Как сделать перетаскивание нарисованного объекта по щелчку мыши нарисованного с помощью метода DrawEllipse класса...

Перемещение объектов OvalShape по форме мышкой
Подскажите как это реализовать, пожалуйста!

Перетаскивание нарисованных объектов
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

4
 Аватар для tofers
30 / 30 / 10
Регистрация: 07.10.2011
Сообщений: 204
08.10.2011, 23:36
Flamе, Используй
C#
1
 Graph.Clear(BackColor);
0
9 / 9 / 1
Регистрация: 25.10.2009
Сообщений: 152
09.10.2011, 00:08  [ТС]
не помогает, к сожалению...
0
24 / 24 / 11
Регистрация: 28.12.2010
Сообщений: 142
09.10.2011, 00:10
Прошу прощения, не сочтите за грубость, но ваше решение проблемы "перемещения прямоугольника мышью" на мой взгляд слишком экстравагантно.

Предлагаю вам свой вариант:

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
        Rectangle rect = new Rectangle(0, 0, 100, 100);
        Point ptDown = new Point();
        Boolean mouseDown = false;
 
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawRectangle(Pens.Blue, rect);
        }
 
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (Rectangle.Intersect(new Rectangle(e.X, e.Y, 0, 0), rect) != Rectangle.Empty)
            {
                ptDown = Point.Subtract(e.Location, (Size)rect.Location);
                mouseDown = true;
            }
        }
 
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            mouseDown = false;
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (mouseDown)
                rect.Location = Point.Subtract(e.Location, (Size)ptDown);
 
            this.Invalidate();
        }
2
9 / 9 / 1
Регистрация: 25.10.2009
Сообщений: 152
09.10.2011, 00:15  [ТС]
[QUOTE=PAVEL_USER;2053032]Прошу прощения, не сочтите за грубость, но ваше решение проблемы "перемещения прямоугольника мышью" на мой взгляд слишком экстравагантно.

Предлагаю вам свой вариант:

спасибо большое, обязательно рассмотрю его) моё решение чисто экспериментальное)) оно построено на основе кода рисования прямоугольника мышью из книги Петцольда)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2011, 00:15
Помогаю со студенческими работами здесь

Перемещение компонента PictureBox мышкой
Всем привет! Собственно сама задача, это при зажатой левой кнопке мыши перемешать PictureBox внутри другого(родительского) PictureBox....

Перемещение мышкой PictureBox'а по форме
Подскажите как мне сделать,чтобы в процессе компиляции я мог при нажатии на Pickturebox перемещать ее по форме?

Перемещение объекта по форме мышкой
Допустим на форме мы рисуем TextBox и Label. Пользователь запускает программу и хочет переместить эти два элемента на форме в другое место,...

Перемещение многоугольника мышкой c# windows forms
Помогите, пожалуйста : требуется реализовать перемещение многоугольника мышкой, многоугольник выделяется мышкой и перемещается...

Передвижение объектов по форме мышкой
Хочу написать в Windows Forms игру Unblock King. На данном этапе реализовал реализовал перемещение PictureBox по форме, и их столкновение....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru