从VB.net中的主窗体打开和关闭多个表单

时间:2015-03-15 15:28:30

标签: vb.net forms multiple-forms

在我的项目中(一种屏幕保护程序)我有一个主表单和第二个表单(PicView)。 我想打开第二个表单的许多实例并在其中显示图片。 我可以那样做,但是当我打开时,例如4个表单我想在打开下一个表单之前关闭第一个表单,以便表单总数保持为4。 我遇到的问题是关闭例程不知道表单实例,调试器告诉我创建一个新实例,但我想使用现有的实例。 如何使表单名称对主例程可见,或者我是否需要将引用传递给创建的表单?

由于

Private Sub btnTest_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click
    gsPic1 = "D:\My Stuff\411CANON\IMG_1161.JPG"
    gsPic2 = "D:\My Stuff\411CANON\IMG_1167.JPG"
    gsPic3 = "D:\My Stuff\411CANON\IMG_1174.JPG"
    gsPic4 = "D:\My Stuff\411CANON\IMG_1178.JPG"


    ScreenSavePicIndex(gsPic1, 1)
    Application.DoEvents()
    ScreenSavePicIndex(gsPic2, 2)
    Application.DoEvents()
    ScreenSavePicIndex(gsPic3, 3)
    Application.DoEvents()
    ScreenSavePicIndex(gsPic4, 4)

    MsgBox("Now Closing 1")
    CloseScreenSaverPic(1)
    Application.DoEvents()
    MsgBox("Now Closing 3")
    CloseScreenSaverPic(3)
    Application.DoEvents()
    MsgBox("Now Closing 4")
    CloseScreenSaverPic(4)
    Application.DoEvents()
End Sub
Private Sub CloseScreenSaverPic(ByVal iIndex As Integer)
    Dim frmPicViewerScrSav(iIndex) As PicView
    frmPicViewerScrSav(iIndex) = New PicView
    frmPicViewerScrSav(iIndex).Close()
End Sub

Private Sub ScreenSavePicIndex(ByVal sFilePathandName As String, iIndex As Integer)


    Dim iTargetHeight As Integer
    Dim iTargetWidth As Integer
    Dim dFactorHeight As Double
    Dim dFactorWidth As Double




    Dim objImage As System.Drawing.Image
    Try
        objImage = System.Drawing.Image.FromFile(sFilePathandName)
    Catch ex As Exception
        objImage = Nothing
    End Try

    Dim frmPicViewerScrSav(iIndex) As PicView
    frmPicViewerScrSav(iIndex) = New PicView
    Dim dFactor As Double
    dFactor = 1

    frmPicViewerScrSav(iIndex).FormBorderStyle = Windows.Forms.FormBorderStyle.None


    iTargetWidth = Screen.PrimaryScreen.Bounds.Width / giScreenSavePicSize
    iTargetHeight = Screen.PrimaryScreen.Bounds.Height / giScreenSavePicSize



    'Check if the pic is bigger than what we want to display

    If objImage.Width > iTargetWidth Then
        'if it is wider then we need to find out how much bigger it is by factor
        dFactorWidth = iTargetWidth / objImage.Width
    End If

    If objImage.Height > iTargetHeight Then
        'if it is higher then we need to find out how much bigger it is by factor
        dFactorHeight = iTargetHeight / objImage.Height
    End If

    If dFactorWidth > dFactorHeight Then
        dFactor = dFactorWidth
    Else
        dFactor = dFactorHeight
    End If

    'Console.WriteLine("Factor is: " & dFactor)

    frmPicViewerScrSav(iIndex).Width = objImage.Width * dFactor
    frmPicViewerScrSav(iIndex).Height = objImage.Height * dFactor
    objImage.Dispose()





    Dim r As New Random()

    Dim x As Integer = r.Next(Screen.PrimaryScreen.Bounds.Width - frmPicViewerScrSav(iIndex).Width)
    Dim y As Integer = r.Next(Screen.PrimaryScreen.Bounds.Height - frmPicViewerScrSav(iIndex).Height)
    Dim p As New Point(x, y)
    'Console.WriteLine("Putting it at x= " & x & ", y= " & y)

    frmPicViewerScrSav(iIndex).Location = p




    frmPicViewerScrSav(iIndex).PictureBox1.Hide()

    frmPicViewerScrSav(iIndex).PictureBox1.ImageLocation = sFilePathandName
    frmPicViewerScrSav(iIndex).PictureBox1.SizeMode = PictureBoxSizeMode.Zoom


    frmPicViewerScrSav(iIndex).PictureBox1.Show()
    frmPicViewerScrSav(iIndex).Show()
End Sub

0 个答案:

没有答案