Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Invigo
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 23
1

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

23.12.2015, 09:29. Просмотров 833. Ответов 5

Доброго времени суток. Подскажите как создать прямоугольник, рисующийся по принципу paint, от точки Х к точке У методом перетаскивания. Пробовал сделать так
C#
1
2
   Pen p = new Pen(CurrentColor);
            g.DrawRectangle (p, PrevPoint, CurrentPoint, PrevPoint,CurrentPoint);
Ругается
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2015, 09:29
Ответы с готовыми решениями:

Рисование прямоугольника
Не получается нарисовать прямоугольник на pictureBox, чтобы можно было изменять...

Рисование прямоугольника на picturebox
На форме находится picturebox, на котором нужно нарисовать прямоугольник. В...

Рисование прямоугольника в pictureBox мышью
Всем привет! У меня вот такая проблема.. на форме размещен pictureBox и нужно...

Рисование прямоугольника с закругленными углами
Собственно, вопрос в теме. Никак не могу найти соответствующую функцию Прошу...

Рисование прямоугольника: нарисованное быстро стирается
Пытаюсь нарисовать прямоугольник с помощью GDI+.Прямоугольник рисуется, но если...

5
nio
5954 / 3360 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.12.2015, 09:56 2
Цитата Сообщение от Invigo Посмотреть сообщение
Ругается
нецензурно?
0
Invigo
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 23
23.12.2015, 11:50  [ТС] 3
Почти матом) Изменил немного код
C#
1
2
3
4
5
6
7
8
9
 private void rectangle_draw ()
        {
            Size cs = new Size();
            cs.Height = Math.Abs(StartPoint.Y - FinPoint.Y);
            cs.Width = Math.Abs(StartPoint.X - FinPoint.X);
            Pen m = new Pen(CurrentColor);
            Rectangle rectangle = new Rectangle(StartPoint,cs);
            g.DrawRectangle (m, rectangle);
        }
Теперь он рисует, но есть одно но, когда проводишь сверху-вниз, работает корректно, а когда снизу вверх, отображается некорректно с изменением начальной точки и размерами
0
kolorotur
Эксперт .NET
10485 / 8673 / 2157
Регистрация: 17.09.2011
Сообщений: 14,888
Завершенные тесты: 1
23.12.2015, 12:05 4
C#
1
2
3
4
5
6
7
8
9
10
11
private void rectangle_draw ()
        {
            var start = new Point(Math.Min(StartPoint.X, FinPoint.X), Math.Min(StartPoint.Y, FinPoint.Y));
            var end   = new Point(Math.Max(StartPoint.X, FinPoint.X), Math.Max(StartPoint.Y, FinPoint.Y));
            Size cs = new Size();
            cs.Height = Math.Abs(start.Y - end.Y);
            cs.Width = Math.Abs(start.X - end.X);
            Pen m = new Pen(CurrentColor);
            Rectangle rectangle = new Rectangle(start,cs);
            g.DrawRectangle (m, rectangle);
        }
0
Invigo
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 23
23.12.2015, 12:09  [ТС] 5
Увы, но проблема не устранена
0
kolorotur
Эксперт .NET
10485 / 8673 / 2157
Регистрация: 17.09.2011
Сообщений: 14,888
Завершенные тесты: 1
23.12.2015, 12:16 6
Лучший ответ Сообщение было отмечено Invigo как решение

Решение

Цитата Сообщение от Invigo Посмотреть сообщение
Увы, но проблема не устранена
Значит вы либо код криво скопировали, либо стартовую и конечную точки неправильно высчитываете.

Добавлено через 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
public partial class Canvas : UserControl
{
    public Canvas()
    {
        SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
 
        InitializeComponent();
    }
 
    bool drag;
    Point FinPoint;
    Point StartPoint;
 
    protected override void OnPaint(PaintEventArgs e)
    {
        rectangle_draw(e.Graphics);
    }
 
    protected override void OnMouseDown(MouseEventArgs e)
    {
        StartPoint = e.Location;
        drag = true;
    }
 
    protected override void OnMouseUp(MouseEventArgs e)
    {
        drag = false;
    }
 
    protected override void OnMouseMove(MouseEventArgs e)
    {
        if (drag)
        {
            FinPoint = e.Location;
            Invalidate();
        }
    }
 
    private void rectangle_draw(Graphics g)
    {
        var start = new Point(Math.Min(StartPoint.X, FinPoint.X), Math.Min(StartPoint.Y, FinPoint.Y));
        var end   = new Point(Math.Max(StartPoint.X, FinPoint.X), Math.Max(StartPoint.Y, FinPoint.Y));
        Size cs = new Size();
        cs.Height = Math.Abs(start.Y - end.Y);
        cs.Width = Math.Abs(start.X - end.X);
        Rectangle rectangle = new Rectangle(start,cs);
        g.DrawRectangle(Pens.Black, rectangle);
    }
}
1
23.12.2015, 12:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2015, 12:16

Рисование прямоугольника на PictureBox с помощью мыши
Добрый день. Можете подсказать элементарное рисование на PictureBox...

Рисование прямоугольника мышью: фон PictureBox становится черным
Всё просто... необходимо мышью нарисовать прямоугольник на picturebox...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru