几周来,我断断续续地试图弄清楚这一点。
在我的VB2010 Forms应用程序中,我有许多图片框,这些图片框使用拖放方法填充来自其他图片框的图像。这没问题,它工作得很好。图片框都在一个组框容器中。
问题是试图通过拖放操作在两个图片框之间交换图像。换句话说,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 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 section正在工作--它正在查找控件并更改背景颜色。它只是没有显示图像。
我是不是漏掉了什么?
谢谢!
发布于 2016-05-13 22:25:28
好吧,这太愚蠢了。
我做的每件事都是正确的,只有一个非常愚蠢的例外。在代码的另一部分中,莫名其妙地,我在图像被替换后清除了图片框中的内容。这可能是我试图做的与这个问题无关的事情的残余,我只是从来没有纠正过它。
我为此道歉,并感谢所有的回复。
https://stackoverflow.com/questions/37197473
复制相似问题