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

Соединить несколько PictureBox линией

14.12.2016, 14:20. Показов 1760. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста.
Есть PictureBox'ы,их нужно соединить линией,которая при перемещении pictureBox'а тоже будет перемещаться.PictureBox'ы перемещаются,а вот линия вместе с ними нет.
Рисунок для понимания.
Миниатюры
Соединить несколько PictureBox линией  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2016, 14:20
Ответы с готовыми решениями:

Соединить два Label прямой линией
Салют. Допустим на главное форме у меня имеются два Label'а, и мне нужно соединить их прямой...

Как соединить две точки линией?
у меня есть 2 точки нарисованные с помощью GDI, нужно их соединить линией,но почему то криво все...

Соединение линией двух PictureBox'ов
доброго времени суток,подскажите,мне нужно чтоб при нажатии кнопки к примеру баттон 1 соединить...

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

10
911 / 815 / 333
Регистрация: 03.02.2015
Сообщений: 5,265
Записей в блоге: 9
14.12.2016, 14:31 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
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 DT
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.DrawLines(Pens.Black, new Point[] { pictureBox1.Location, pictureBox2.Location });
            e.Graphics.DrawLines(Pens.Black, new Point[] { pictureBox3.Location, pictureBox4.Location });
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            Invalidate();
        }
    }
}
Не знаю что Вы там делаете, но рекомендую Архитектура ПО в WinForms (FAQ & HowTo) все равно к этому придете.
Миниатюры
Соединить несколько PictureBox линией  
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 19
15.12.2016, 11:39  [ТС] 3
Спасибо работает!
А как это можно сделать, если PictureBox'ы создаются в коде программы?

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
93
94
95
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 myProgram
{
    public partial class Form1 : Form
    {
     
        bool move = false;
        Point temp;
      
        public Form1()
        {
            InitializeComponent();
        }
 
//По кнопке 1 создается pictureBox1 в заданной точке,с определенным размером и изображением
        public void button1_Click(object sender, EventArgs e)
        {
           
            PictureBox pict1 = new PictureBox()
 
            {
                Location = new Point(200, 30),
                Size = new Size(50, 25),
                Image = Image.FromFile("C: /Users/Kseniya/Desktop/myProgram/1.bmp")
                          
             };
            
            Controls.Add(pict1);
//Перемещение pictureBox'a
            pict1.MouseDown += new MouseEventHandler(pictBox_MouseDown);
            pict1.MouseMove += new MouseEventHandler(pictBox_MouseMove);
            pict1.MouseUp += new MouseEventHandler(pictBox_MouseUp);
                                       
 
        }
 
 
        public void pictBox_MouseMove(object sender, MouseEventArgs e)
        {
            if (move)
            {
                PictureBox pictBox = (PictureBox)sender;
                Point point = pictBox.Location;
                point.X += e.X - temp.X;
                point.Y += e.Y - temp.Y;
                pictBox.Location = point;
                               
 
            }
        }
 
        public void pictBox_MouseUp(object sender, MouseEventArgs e)
        {
            move = false;
        }
 
        public void pictBox_MouseDown(object sender, MouseEventArgs e)
        {
            temp = e.Location;
            move = true;
        }
 
//По кнопке 2 создается pictureBox2 в заданной точке,с определенным размером и изображением
        public void button2_Click(object sender, EventArgs e)
        {
           
            PictureBox pict2 = new PictureBox()
 
            {
                Location = new Point(300, 30),
                Size = new Size(48, 28),
                Image = Image.FromFile("C: /Users/Kseniya/Desktop/myProgram/2.bmp")
 
 
            };
 
            Controls.Add(pict2);
//Перемещение pictureBox'a
            pict2.MouseDown += new MouseEventHandler(pictBox_MouseDown);
            pict2.MouseMove += new MouseEventHandler(pictBox_MouseMove);
            pict2.MouseUp += new MouseEventHandler(pictBox_MouseUp);
            
 
        }
   }
}
0
911 / 815 / 333
Регистрация: 03.02.2015
Сообщений: 5,265
Записей в блоге: 9
15.12.2016, 11:41 4
Цитата Сообщение от Ксения257 Посмотреть сообщение
А как можно нарисовать линию, если PictureBox'ы создаются в коде программы?
Точно также. Не важно где они создаются, на форме просто будут рисоваться соединительные линии.
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 19
15.12.2016, 11:52  [ТС] 5
Цитата Сообщение от Sanya_sa Посмотреть сообщение
Точно также. Не важно где они создаются, на форме просто будут рисоваться соединительные линии.
OnPaint не видит p1 и p2...

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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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 myProgram
{
    public partial class Form1 : Form
    {
     
        bool move = false;
        Point temp;
       
       
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
              
       
            public void button1_Click(object sender, EventArgs e)
        {
           
            PictureBox pict1 = new PictureBox()
 
            {
                Location = new Point(200, 30),
                Size = new Size(50, 25),
                Image = Image.FromFile("C: /Users/Kseniya/Desktop/myProgram/1.bmp")
                          
             };
            
            Controls.Add(pict1);
            pict1.MouseDown += new MouseEventHandler(pictBox_MouseDown);
            pict1.MouseMove += new MouseEventHandler(pictBox_MouseMove);
            pict1.MouseUp += new MouseEventHandler(pictBox_MouseUp);
           
            Point p1 = new Point();
            p1.Y = pict1.Location.Y + pict1.Size.Height / 2;
            p1.X = pict1.Location.X + pict1.Size.Width / 2;
 
        }
 
 
        public void pictBox_MouseMove(object sender, MouseEventArgs e)
        {
            if (move)
            {
                PictureBox pictBox = (PictureBox)sender;
                Point point = pictBox.Location;
                point.X += e.X - temp.X;
                point.Y += e.Y - temp.Y;
                pictBox.Location = point;
                               
 
            }
        }
 
        public void pictBox_MouseUp(object sender, MouseEventArgs e)
        {
            move = false;
        }
 
        public void pictBox_MouseDown(object sender, MouseEventArgs e)
        {
            temp = e.Location;
            move = true;
        }
 
        public void button2_Click(object sender, EventArgs e)
        {
           
            PictureBox pict2 = new PictureBox()
 
            {
                Location = new Point(300, 30),
                Size = new Size(48, 28),
                Image = Image.FromFile("C: /Users/Kseniya/Desktop/myProgram/2.bmp")
 
 
            };
 
            Controls.Add(pict2);
            pict2.MouseDown += new MouseEventHandler(pictBox_MouseDown);
            pict2.MouseMove += new MouseEventHandler(pictBox_MouseMove);
            pict2.MouseUp += new MouseEventHandler(pictBox_MouseUp);
           
 
            Point p2 = new Point();
            p2.Y = pict2.Location.Y + pict2.Size.Height / 2;
            p2.X = pict2.Location.X + pict2.Size.Width / 2;
                              
           
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.DrawLine(new Pen(Color.Black, 6), p1, p2);
 
        }
 
private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
 
            Invalidate();
        }
    }
}
0
911 / 815 / 333
Регистрация: 03.02.2015
Сообщений: 5,265
Записей в блоге: 9
15.12.2016, 12:22 6
Цитата Сообщение от Ксения257 Посмотреть сообщение
OnPaint не видит p1 и p2...
А с какой стати он их видеть должен?
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 19
15.12.2016, 12:34  [ТС] 7
Цитата Сообщение от Sanya_sa Посмотреть сообщение
А с какой стати он их видеть должен?
Я объявляю эти точки глобальными переменами,в процессе он находит правильные координаты,а в OnPaint считывает нулевые координаты.

Объясните,пожалуйста, почему не правильно.
0
911 / 815 / 333
Регистрация: 03.02.2015
Сообщений: 5,265
Записей в блоге: 9
15.12.2016, 12:43 8
Вы в обработчиках их обьявляете (и видны они будут только в тех обработчиках где обьявлены) строки 46 и 97. \
Глобальные вижу только temp и move.

Добавлено через 4 минуты
Да и ваще не пойму для чего они? Сделайте метод который принимает Point и передавайте в него Location нужных элеметнов, сам метод вернет те координаты какие нужно.

Например:


C#
1
2
3
4
5
6
7
8
9
10
Point CalcCoocrds(Point p)
{
   return new Point(p.X + 10, p.Y - 5)
}
 
// И тогда
 protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.DrawLine(new Pen(Color.Black, 6),  CalcCoocrds(pictuReBoxOne.Location),  CalcCoocrds(pictuReBoxTwo.Location)
        }
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 19
15.12.2016, 12:44  [ТС] 9
после temp я их и объявила (сюда просто не скинула код ). Затем в процессе ,как у же писала выше, считывает правильные координаты,но в OnPaint передает нулевые.
0
911 / 815 / 333
Регистрация: 03.02.2015
Сообщений: 5,265
Записей в блоге: 9
15.12.2016, 12:55 10
Цитата Сообщение от Ксения257 Посмотреть сообщение
Point p2 = new Point();
Цитата Сообщение от Ксения257 Посмотреть сообщение
Point p1 = new Point();
Вот это что? Если они глобальные, То просто пишиет:
Цитата Сообщение от Ксения257 Посмотреть сообщение
p1.Y = pict1.Location.Y + pict1.Size.Height / 2;
* * * * * * p1.X = pict1.Location.X + pict1.Size.Width / 2;
Добавлено через 1 минуту
Вы ваще молодец!
Цитата Сообщение от Ксения257 Посмотреть сообщение
после temp я их и объявила (сюда просто не скинула код ).
))))
Улыбнули)))))

Битвы экстросенсов насмотрелись)
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 19
16.12.2016, 07:17  [ТС] 11
Огромное спасибо за помощь!!!
0
16.12.2016, 07:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2016, 07:17
Помогаю со студенческими работами здесь

Одновременная загрузка картинок в несколько PictureBox-ов
Добрый день ребята. У меня такой касяк. У меня на одной форме много pictureBox... Я в них загружаю...

Как обработать несколько pictureBox в цикле?
Дано: на форме восемь PictureBox, соответственно с именами pictureBox1 ... pictureBox8. В коде есть...

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

Можно ли соединить несколько проектов в один
Можно ли как-нибудь соединить несколько проектов в один т.е. например, при нажатии кнопки...

в pictureBox несколько картинок
Вечер добрый всем :) Задача в том, что бы в одном pictureBox нарисовать допустим 2 разных...

Рисование на picturebox в несколько слоев
Как рисовать на picturebox в несколько слоев? Мне нужно на общем фоне рисовать несколько маленьких...


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

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