Ich habe seit Wochen versucht, das herauszufinden.Dynamisch wechselndes Bild im Bild funktioniert nicht
In meiner VB 2010 Forms-Anwendung habe ich eine Anzahl von Bildfeldern, die mit Bildern aus anderen Bildfeldern mit der Drag-and-Drop-Methode gefüllt werden. Das ist kein Problem, es funktioniert gut. Die Bildfelder befinden sich alle in einem Sammelbehälter.
Das Problem besteht darin, Bilder zwischen zwei Bildfeldern bei einer Drag-and-Drop-Operation auszutauschen. Mit anderen Worten: pBox1 hat image.x und pBox2 hat image.y. Ziehen Sie das Bild von pBox2 zu pBox1 und legen Sie es ab; pBox1 wird dann image.y von pBox2 haben und pBox2 wird image.x von pBox1 haben.
Mit diesem Beispiel hier ist der Code, den ich bisher habe:
Private Sub pBox2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles pBox1.MouseDown
strImageSource = "pBox2" 'strImageSource is a global string variable
[other stuff]
end sub
^Das spart den Namen des Quellbildfeldes zu einem globalen String.
Private Sub pBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles pBox1.DragDrop
For Each Control as PictureBox in GroupBox1.Controls.OfType(of PictureBox)()
if Control.Name = strImageSource then
Control.Image = pBox1.Image
end if
next
dim imgTarget as Image = CType((e.Data.GetData(DataFormats.Bitmap)), Bitmap)
pBox1.image = imgTarget
End Sub
^Dies sucht nach dem Bildfeld, wie durch die strImageSource („pBox2“) genannt und kopiert den Inhalt von pBox1 hinein, und dann fällt das Bild, das in pBox2 in pBox1 war.
Ich hoffe, das macht Sinn.
Damit wird das Bild von pBox2 korrekt in pBox1 platziert, aber das Bild wird nicht von pBox1 in pBox2 umgeschaltet. pBox2 ist nur leer. Das Debugging zeigt jedoch, dass das Bild in pBox2 nicht nichts ist; Es enthält eine Bitmap. Es ist einfach nicht sichtbar. Jetzt
, nur als Test, habe ich eine Linie auf dem für jeden Abschnitt, den die Hintergrundfarbe des Bildfeldes ändern würde:
For Each Control as PictureBox in GroupBox1.Controls.OfType(of PictureBox)()
if Control.Name = strImageSource then
Control.Image = pBox1.Image
Control.BackColor = color.red
end if
next
Und die Hintergrundfarbe ändert. Das sagt mir, dass der Abschnitt For Each funktioniert - es findet das Steuerelement und ändert die Hintergrundfarbe. Es zeigt nur nicht das Bild.
Gibt es etwas, das ich übersehe?
Danke!
Wir haben keine Ahnung, was Sie in 'DoDragDrop' machen.Es sieht so aus, als hätten Sie Ihre eigene Methode mit dieser globalen Zeichenfolge gerollt. – Plutonix