PictureBox 的图像不会出现在新表单中,该表单应在停用时关闭

发布于 2025-01-13 04:18:39 字数 1619 浏览 5 评论 0原文

PictureEdit 或 PictureBox 的图像未在新表单 (Form2) 中显示。
此外,当单击父窗体(form1)中的不同控件时,这个新窗体应该自动关闭。

使用我的代码,当我双击 Form1 中的图像时,仅出现第三个图像。

有没有办法让我不需要根据Form1中的图像数量创建3个新表单?

作为记录,我使用 Visual Studio 2010

Public Class Form1
   Private Sub PictureEdit1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureEdit1.DoubleClick
        Dim yourForm As New Form2()
        yourForm.ShowDialog()
    End Sub

    Private Sub PictureEdit2_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureEdit2.DoubleClick
        Dim yourForm As New Form2()
        yourForm.ShowDialog()
    End Sub
    Private Sub PictureEdit3_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureEdit3.DoubleClick
        Dim yourForm As New Form2()
        yourForm.ShowDialog()
    End Sub
End Class

Public Class Form2
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Form_One As Form1 = CType(Application.OpenForms("form1"), Form1)
        Me.PictureEdit1.Image = Form_One.PictureEdit1.Image
        Me.PictureEdit1.Image = Form_One.PictureEdit2.Image
        Me.PictureEdit1.Image = Form_One.PictureEdit3.Image
    End Sub
End Class

来自 form1 的 picturedit1,pictureedit2,pictureedit3结果 picturedit1来自表格2

The Image of a PictureEdit or PictureBox is not shown in a new form (Form2).
Also, this new Form should auto-close when clicking on a different Control in the parent form (form1).

With my code, only the third Image appears when I double-click on an Image in Form1.

Is there a solution so that I do not need to create 3 new forms according to the number of images in Form1?.

For the record, I use Visual Studio 2010

Public Class Form1
   Private Sub PictureEdit1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureEdit1.DoubleClick
        Dim yourForm As New Form2()
        yourForm.ShowDialog()
    End Sub

    Private Sub PictureEdit2_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureEdit2.DoubleClick
        Dim yourForm As New Form2()
        yourForm.ShowDialog()
    End Sub
    Private Sub PictureEdit3_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureEdit3.DoubleClick
        Dim yourForm As New Form2()
        yourForm.ShowDialog()
    End Sub
End Class

Public Class Form2
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Form_One As Form1 = CType(Application.OpenForms("form1"), Form1)
        Me.PictureEdit1.Image = Form_One.PictureEdit1.Image
        Me.PictureEdit1.Image = Form_One.PictureEdit2.Image
        Me.PictureEdit1.Image = Form_One.PictureEdit3.Image
    End Sub
End Class

picturedit1,picturedit2,picturedit3 from form1
result picturedit1 from form2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云归处 2025-01-20 04:18:39

所需的小更改:

  • 向 Form2 添加一个接受图像作为参数的构造函数。
  • 覆盖OnDeactivate,以便在您单击表单外部时关闭表单。
  • 使用 Show(Me) 而不是 ShowDialog():这将使调用 Form 成为 Form2 的所有者,因此它位于其所有者之上,但它不是模态窗口,当您在窗口外部单击时,该窗口不会被停用。

Public Class Form1
   ' [...]
   Private Sub PictureEdit1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureEdit1.DoubleClick
        Dim f2 As New Form2(PictureEdit1.Image)
        f2.Show(Me)
    End Sub
    ' [...]
End Class

Public Class Form2
    Public Sub New()
        Me.New(Nothing)
    End Sub
    Public Sub New(img As Image)
        InitializeComponent()
        PictureEdit1.Image = img
    End Sub

    Protected Overrides Sub OnDeactivate(e As EventArgs)
        MyBase.OnDeactivate(e)
        BeginInvoke(New Action(Sub() Close()))
    End Sub
End Class 

Small changes required:

  • Add a constructor to your Form2 that accepts an Image as argument.
  • Override OnDeactivate, to close the Form when you click outside of it.
  • Use Show(Me) instead of ShowDialog(): this will make the calling Form the Owner of Form2, so it stays on top of its owner, but it's not a Modal Window, which is not deactivated when you click outside of it.

Public Class Form1
   ' [...]
   Private Sub PictureEdit1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureEdit1.DoubleClick
        Dim f2 As New Form2(PictureEdit1.Image)
        f2.Show(Me)
    End Sub
    ' [...]
End Class

Public Class Form2
    Public Sub New()
        Me.New(Nothing)
    End Sub
    Public Sub New(img As Image)
        InitializeComponent()
        PictureEdit1.Image = img
    End Sub

    Protected Overrides Sub OnDeactivate(e As EventArgs)
        MyBase.OnDeactivate(e)
        BeginInvoke(New Action(Sub() Close()))
    End Sub
End Class 
被翻牌 2025-01-20 04:18:39

完成 Jimi 建议的更改后,您还可以通过在“Handles”关键字后列出多个控件/事件,使用 ONE sub 来处理所有三个 PictureEdit 控件:

Private Sub PictureEditAll_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureEdit1.DoubleClick, PictureEdit2.DoubleClick, PictureEdit3.DoubleClick
    Dim picEdit As PictureEdit = DirectCast(sender, PictureEdit)
    Dim f2 As New Form2(picEdit.Image)
    f2.Show(Me)
End Sub

Once you've made the changes suggested by Jimi, you can also use ONE sub to handle all three PictureEdit controls by listing more than one control/event after the "Handles" keyword:

Private Sub PictureEditAll_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureEdit1.DoubleClick, PictureEdit2.DoubleClick, PictureEdit3.DoubleClick
    Dim picEdit As PictureEdit = DirectCast(sender, PictureEdit)
    Dim f2 As New Form2(picEdit.Image)
    f2.Show(Me)
End Sub
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文