【问题标题】:Drawing event draws two object绘图事件绘制两个对象
【发布时间】:2016-01-04 12:47:01
【问题描述】:

程序只有这个代码。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    PictureBox1.Image = PictureBox2.Image
    Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)
    g.DrawEllipse(New Pen(Color.MediumOrchid, 5), 30, 30, 30, 30)
    g.Dispose()
    PictureBox1.Refresh()
    PictureBox2.Refresh()
End Sub

点击之前PictureBox1是空的,PictureBox2有一个白色的图像。

点击后PictureBox1PictureBox2都有椭圆。

我认为程序为两个pictureBox'es 使用一个图像。所以当我画它们时,它们都被画了。我想用椭圆设置 picbox2 白色图像和 picbox1 白色图像。任何解决方案?

【问题讨论】:

  • 您使用 PictureBox1.Image = PictureBox2.Image 强制执行该行为。
  • 我知道。我想编辑 pic2 并将其保存到 pic1。但 pic2 不能更改。
  • 然后你必须创建一个图像的副本。
  • @UweAllner 然后写一个答案。
  • 图片框2和图片框1是同一个对象。想象一下,您已经创建了一个气球。然后你做一个指向它的标志,叫做 Balloon1。然后你做另一个指向它的标志,叫做 Balloonl2 然后你告诉某人爆掉 Balloon1。然后你打电话给那个人看 Balloon2,他们回来说它已经爆炸了。这就是你所拥有的。对同一对象的两次引用。使用第一个引用对对象做一些事情,它将在第二个引用中可见。

标签: vb.net user-interface graphics drawing ram


【解决方案1】:

您必须制作图像的副本,因此您将使用相同的数据,但不是相同的对象,因此不会对原始对象进行更改。

我不是 vb.net 专家,但你可以试试这个:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles
    Button1.Click
    PictureBox1.Image = New Bitmap(PictureBox2.Image)
    Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)
    g.DrawEllipse(New Pen(Color.MediumOrchid, 5), 30, 30, 30, 30)
    g.Dispose()
    PictureBox1.Refresh()
    PictureBox2.Refresh()
End Sub

【讨论】:

  • 它可能被否决了,因为“仅代码”的答案不受欢迎。如果你想要一个更好的分数,你应该解释用户做错了什么以及你的代码为什么/如何解决问题。
  • 我已经省略了解释,就像我在上面的评论中给出的那样。编辑它。
猜你喜欢
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 2013-01-13
  • 1970-01-01
  • 2020-07-09
  • 2013-02-28
  • 1970-01-01
相关资源
最近更新 更多