我一直在试图解决这个问题几个星期。
在我的VB 2010 Forms应用程序中,我有许多图片框,使用拖放方法填充其他图片框中的图像。这没问题,工作正常。图片框都在一个groupbox容器中。
问题是尝试在拖放操作中在两个图片框之间交换图像。换句话说,pBox1有image.x,pBox2有image.y。将图像从pBox2拖到pBox1,然后将其删除; pBox1将从pBox2获得image.y,pBox2将从pBox1获得image.x.
通过这个例子,这是我到目前为止的代码:
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
^这会将源图片框的名称保存为全局字符串。
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
^这将搜索由strImageSource(“pBox2”)命名的图片框,并将pBox1的内容复制到其中,然后将pBox2中的图像放入pBox1。
我希望这是有道理的。
这正确地将图像从pBox2放入pBox1,但它不会将图像从pBox1切换到pBox2。 pBox2只是空白。但是,调试显示pBox2中的图像并非一无所获;它确实包含一个位图。它只是不可见。
现在,就像测试一样,我在For Each部分添加了一行来改变图片框的背景颜色:
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
背面的颜色确实发生了变化。这告诉我For Each部分正在工作 - 它正在找到控件并改变背面颜色。它只是没有显示图像。
我有什么东西可以忽略吗?
谢谢!
答案 0 :(得分:0)
您应该在PictureBox控件上调用Control.Refresh()以更新图像。
答案 1 :(得分:0)
使用定义为Picturebox的全局变量
,而不是使用strImageSource
Private tmpPictureBox As PictureBox
然后存储该图片框参考,以便您可以在DragDrop上设置其图像
Private Sub pBox2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles pBox1.MouseDown
'store the picturebox reference
tmpPictureBox = sender
[other stuff]
end sub
Private Sub pBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles pBox1.DragDrop
'set the first image to the second
tmpPictureBox.Image = sender.image
'set the second image to the first
pBox1.image = CType((e.Data.GetData(DataFormats.Bitmap)), Bitmap)
End Sub
答案 2 :(得分:0)
我正在做一切正确的事情,一个真正的愚蠢的例外。在代码的另一部分,莫名其妙地,我在更换图像后清除了内容的图片框。它可能是我试图做的与此问题无关的遗留物,我从来没有纠正过它。
我为此道歉,并感谢所有回复。