Ik kan in mijn programma pictureboxen genereren via een button, en via drag en drop op een form plaatsen.
Nu heb ik op mijn form één grote picturebox geplaatst, wat het eigenlijke werkveld wordt. Ik ben voor een picturebox gegaan, omdat hierin een grid en lijnen worden getekend.
Dit alles wordt met deze code aangestuurd:
Vermits het form nu niet meer wordt gebruikt, maar wel één grote picturebox, moeten de aangemaakte pictureboxen op die picturebox worden geplaatst.
Ik heb dit geprobeerd:
Ik kan nu geen drag en drop uitvoeren op de picturebox, wel op het form. Ook heb ik nog enkele pogingen gewaagd om bestaande code te manipuleren maar zonder resultaat.
Als er een picturebox is geplaatst op het form, dan kan ik deze niet verplaatsen op de picturebox. Het lijkt alsof deze achter de picturebox zit.
Op het net is genoeg source code en voorbeelden te vinden ivm drag & drop , maar zelfs een testcase hiervoor krijg ik niet werkende.
Wat wel raar is, als ik een picturebox plaats op het form in design, en tijdens het runnen deze verplaats met bovenstaande code, dat werkt wel !
Ik zou dus drag en drop op de picturebox willen doen van gegenereerde pictureboxen, die daarna nog verplaatst kunnen worden.
Wat doe ik hier verkeerd?
Nu heb ik op mijn form één grote picturebox geplaatst, wat het eigenlijke werkveld wordt. Ik ben voor een picturebox gegaan, omdat hierin een grid en lijnen worden getekend.
Dit alles wordt met deze code aangestuurd:
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
| int teller_transfo, teller_vermogen, teller_scheider, teller_motor; Point pos, pos2, grid2; int grid_spacing = 30; bool m_drawing; Bitmap m_BufferBitmap; Graphics m_bufferGraphics; int m_X1, m_Y1, m_X2, m_Y2; bool dragging; int curX, curY; private void SaveSnapshot() { Bitmap new_Bitmap; new_Bitmap = new Bitmap(picCanvas.Size.Height, picCanvas.Size.Width); m_bufferGraphics = Graphics.FromImage(new_Bitmap); m_bufferGraphics.Clear(picCanvas.BackColor); DrawGrid(new_Bitmap); if (!(m_BufferBitmap == null)) { m_bufferGraphics.DrawImage(m_BufferBitmap, 0, 0); } m_BufferBitmap = new_Bitmap; } private void DrawPicture(Graphics gr) { if (!(m_BufferBitmap == null)) { gr.DrawImage(m_BufferBitmap, 0, 0); } } private void SnapToGrid(ref int X, ref int Y) { X = (grid_spacing * ((X / grid_spacing))); Y = (grid_spacing * ((Y / grid_spacing))); //X = 10; //Y = 10; } public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { SaveSnapshot(); } private void Form1_DragDrop(object sender, DragEventArgs e) { PictureBox transfo = (PictureBox)e.Data.GetData(typeof(PictureBox)); transfo.Location = this.PointToClient(new Point(e.X, e.Y)); //Picturebox wordt geplaatst alsof de cursor in het midden staat van de picturebox ipv linkerbovenhoek pos.X = MousePosition.X; pos.Y = MousePosition.Y; pos2.X = pos.X - 25; pos2.Y = pos.Y - 50; transfo.Location = pos2; } private void Form1_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; grid2.X = MousePosition.X; grid2.Y = MousePosition.Y; toolStripStatusLabel1.Text = "X Pos:" + MousePosition.X.ToString(); toolStripStatusLabel2.Text = "Y Pos:" + MousePosition.Y.ToString(); } private void btn_transfo_MouseDown(object sender, MouseEventArgs e) { teller_transfo += 1; PictureBox transfo = new PictureBox(); transfo.Name = "transfo" + teller_transfo; transfo.ClientSize = new Size(50, 50); transfo.SizeMode = PictureBoxSizeMode.StretchImage; try { transfo.Image = Image.FromFile(@"c:\pic\transfo.jpg"); } catch (Exception error) { MessageBox.Show(error.Message, "Cannot find pic", MessageBoxButtons.OK, MessageBoxIcon.Error); } transfo.MouseDown += new MouseEventHandler(transfo_MouseDown); transfo.MouseUp += new MouseEventHandler(transfo_MouseUp); transfo.MouseMove += new MouseEventHandler(transfo_MouseMove); transfo.MouseDoubleClick += new MouseEventHandler(transfo_MouseDoubleClick); transfo.MouseClick += new MouseEventHandler(transfo_MouseRightClick); this.Controls.Add(transfo); this.DoDragDrop(transfo, DragDropEffects.Move); toolStripStatusLabel1.Text = "X Pos:" + MousePosition.X.ToString(); toolStripStatusLabel2.Text = "Y Pos:" + MousePosition.Y.ToString(); } void transfo_MouseDoubleClick(object sender, MouseEventArgs e) { MessageBox.Show("transfo dubbelklik"); } void transfo_MouseRightClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { MessageBox.Show("transfo Rechtsklik"); } } void transfo_MouseMove(object sender, MouseEventArgs e) { PictureBox x = (PictureBox)sender; if (x.Tag != null && (bool)x.Tag) { pos.X = MousePosition.X; pos.Y = MousePosition.Y; pos2.X = pos.X - 25; pos2.Y = pos.Y - 50; grid2.X = MousePosition.X; grid2.Y = MousePosition.Y; toolStripStatusLabel1.Text = "X Pos:" + MousePosition.X.ToString(); toolStripStatusLabel2.Text = "Y Pos:" + MousePosition.Y.ToString(); ((Control)sender).Location = pos2; } } void transfo_MouseUp(object sender, MouseEventArgs e) { ((Control)sender).Tag = false; } void transfo_MouseDown(object sender, MouseEventArgs e) { ((Control)sender).Tag = true; } |
Vermits het form nu niet meer wordt gebruikt, maar wel één grote picturebox, moeten de aangemaakte pictureboxen op die picturebox worden geplaatst.
Ik heb dit geprobeerd:
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
| private void Form1_Load(object sender, EventArgs e) { this.picCanvas.AllowDrop = true; SaveSnapshot(); } void transfo_MouseMove(object sender, MouseEventArgs e) { if (dragging) { PictureBox x = (PictureBox)sender; x.Top = x.Top + (e.Y - curY); x.Left = x.Left + (e.X - curX); } } void transfo_MouseUp(object sender, MouseEventArgs e) { dragging = false; } void transfo_MouseDown(object sender, MouseEventArgs e) { dragging = true; curX = e.X; curY = e.Y; } private void picCanvas_DragEnter(object sender, DragEventArgs e) { { if (e.Data.GetDataPresent(DataFormats.Bitmap)) { e.Effect = DragDropEffects.Copy; } else e.Effect = DragDropEffects.None; } } private void picCanvas_DragDrop(object sender, DragEventArgs e) { { if ((e.Data.GetDataPresent(DataFormats.Bitmap))) { this.picCanvas.Image = (Bitmap)(e.Data.GetData(DataFormats.Bitmap)); } } } |
Ik kan nu geen drag en drop uitvoeren op de picturebox, wel op het form. Ook heb ik nog enkele pogingen gewaagd om bestaande code te manipuleren maar zonder resultaat.
Als er een picturebox is geplaatst op het form, dan kan ik deze niet verplaatsen op de picturebox. Het lijkt alsof deze achter de picturebox zit.
Op het net is genoeg source code en voorbeelden te vinden ivm drag & drop , maar zelfs een testcase hiervoor krijg ik niet werkende.
Wat wel raar is, als ik een picturebox plaats op het form in design, en tijdens het runnen deze verplaats met bovenstaande code, dat werkt wel !
Ik zou dus drag en drop op de picturebox willen doen van gegenereerde pictureboxen, die daarna nog verplaatst kunnen worden.
Wat doe ik hier verkeerd?