Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
1
.NET 4.x

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

18.02.2012, 09:48. Показов 3118. Ответов 11
Метки нет (Все метки)

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
73
74
75
76
77
78
79
80
81
82
83
84
85
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
 
namespace GraphCreator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Graphics g;
        class Line
        {
            private Pen pn;
            private Point bg, end;
            private Graphics gl;
            public Color clr, fnclr;
            private Point[] points;
            public Line(Graphics g, Color c)
            {
                points = new Point[1];
                gl = g;
                clr = Color.OliveDrab;
                pn = new Pen(clr, 2);
                fnclr = new Color();
                fnclr = c;
                bg = new Point();
                end = new Point();
            }
            public void drawLines(Point pnt1, Point pnt2)
            {
                gl.DrawLine(new Pen(clr, 2), pnt1, pnt2);
            }
        };
        Line ln;
        public bool status;
        Point p1 = new Point();
        Point p2 = new Point();
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            p1.X = e.X;
            p1.Y = e.Y;
            status = true;
 
        }
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (status == true)
            {
               p2.X = e.X;
               p2.Y = e.Y;
            }
        }
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            status = false;
            p2.X = e.X;
            p2.Y = e.Y;
        }
        int pause = 5;
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            g = panel1.CreateGraphics();
            ln = new Line(g, panel1.BackColor);
            ln.clr = Color.DarkGreen;
            ln.drawLines(p1, p2);
        }
 
        private void button1_Click(object sender, EventArgs a)
        {
            //System.Threading.Thread.Sleep(pause);
            Form1.ActiveForm.Close();
 
        }
    }
}
Добавлено через 8 часов 45 минут
Так переименовали тему, будто я заставляю исправить.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2012, 09:48
Ответы с готовыми решениями:

Исправить код, что было только рисование линии
help.... помогите кто может.... есть код на turbo c++ рисует фигуру скругленный прямоугольник.......

Рисование линии в Panel при движении мыши
Такое задание ... имеем на форме Panel и надо в ней при движении мыши рисовать линию ( ну как мышь...

Как в элементе управления CListCtrl поймать нажатие определенной клавиши на элементе?
Поймать нажатие клавиши вообще - несложно: BOOL CSysbackupDlg::OnNotify(WPARAM wParam, LPARAM...

Автоматическое изменение размера элемента управления в пользовательском элементе управления
Добрый день, коллеги! Есть пользовательский элемент управления. В составе есть только TextBox....

11
118 / 52 / 9
Регистрация: 23.12.2011
Сообщений: 120
18.02.2012, 10:18 2
Принципиально рисовать именно на панели? Может, лучше использовать PictureBox или написать свой компонент?
0
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
18.02.2012, 10:40  [ТС] 3
В чем сложность?
0
118 / 52 / 9
Регистрация: 23.12.2011
Сообщений: 120
18.02.2012, 11:15 4
Ну я вообще не вижу смысла рисовать на панели и, честно говоря, никогда не пыталась. А разбираться в этом будет время только вечером, после работы. Мне проще показать уже готовый код с рисованием на PictureBox или написанный компонент.

Добавлено через 3 минуты
Да, перехватывать событие тут в любом случае нужно не с формы, а с самой панели
0
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
18.02.2012, 11:21  [ТС] 5
Цитата Сообщение от Jezofine Посмотреть сообщение
Мне проще показать уже готовый код с рисованием на PictureBox или написанный компонент.
Я видел реализацию, про которую вы говорите.
0
118 / 52 / 9
Регистрация: 23.12.2011
Сообщений: 120
18.02.2012, 11:37 6
Цитата Сообщение от Visary_Master Посмотреть сообщение
Я видел реализацию, про которую вы говорите.
Да Вы, я смотрю, телепат. Ну ок, попробую что-нибудь подсказать применительно к панели, если это еще актуально.

Добавлено через 8 минут
Если переназначить события мыши на панель, добавить в MouseUp panel1.Invalidate() и переделать метод отрисовки панели вот так:
C#
1
2
3
4
5
6
private void panel1_Paint(object sender, PaintEventArgs e)
        {
            ln = new Line(e.Graphics, panel1.BackColor);
            ln.clr = Color.DarkGreen;
            ln.drawLines(p1, p2);
        }
то при отпускании мыши появится линия. Но при рисовании следующей она перенесется, так как у Вас один экземпляр линии. Создавайте коллекцию линий что ли, я не знаю, если нужно много.
А для динамичного показа линии:
C#
1
2
3
4
5
6
7
8
9
private void Form1_MouseMove(object sender, MouseEventArgs e)
      {
            if (status == true)
            {
                p2.X = e.X;
                p2.Y = e.Y;
                panel1.Invalidate();
            }
        }
1
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
18.02.2012, 15:18  [ТС] 7
Цитата Сообщение от Jezofine Посмотреть сообщение
Если переназначить события мыши на панель
ааа... как это сделать?
0
118 / 52 / 9
Регистрация: 23.12.2011
Сообщений: 120
18.02.2012, 19:20 8
Цитата Сообщение от Visary_Master Посмотреть сообщение
ааа... как это сделать?
В списке событий формы же Вы сделали события на форму. Теперь просто выберите те же события в списке событий панели на соответствующие действия мышкой. Хотя я надеюсь, что за время моего задротства Вы уже обо всем догадались.
0
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
19.02.2012, 15:40  [ТС] 9
Он на делегаты ругается...
0
118 / 52 / 9
Регистрация: 23.12.2011
Сообщений: 120
19.02.2012, 17:13 10
Цитата Сообщение от Visary_Master Посмотреть сообщение
Он на делегаты ругается...
Понятия не имею, из-за чего может ругаться. Я просто взяла полностью Ваш код, привязала события мышки к панели и подредактировала два метода. Вот и все.
0
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
19.02.2012, 17:35  [ТС] 11
У меня не рисует... можете кинуть мой подкорректированный код сида или на пэйстбин?

Добавлено через 7 минут
Господи, я смог нарисовать линию которая двигается вместе с курсором
0
Памирыч
20.02.2012, 06:42     .NET 4.x Рисование линии на элементе управления panel: исправить код
  #12

Не по теме:

Цитата Сообщение от Visary_Master Посмотреть сообщение
будто я заставляю исправить
Кто хочет помочь, так не посчитает, а кто пришел потроллить, с него и так и эдак помощи не дождешься

0
20.02.2012, 06:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2012, 06:42
Помогаю со студенческими работами здесь

Рисование фрактала, исправить код
Здравствуйте. Занимаюсь рисованием фрактала. Почитав интересные книжки понял, что моим требованиям...

Рисование и удаление окружностей. Исправить код
Ошибку указала в комментариях(102 строка). как можно его исправить? и что еще нужно изменить?...

Рисование простейших фигур, исправить код
using System; using System.Windows.Forms; using System.Drawing; namespace MyMousePoint; class...

Рисование дополнительной линии под углом к основной линии
Доброго времени суток, всем. Помогите решить вопрос. Есть макрос рисующий линию между двумя...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru