Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vb.net代码关闭另一个打开的窗体_Vb.net - Fatal编程技术网

vb.net代码关闭另一个打开的窗体

vb.net代码关闭另一个打开的窗体,vb.net,Vb.net,这是相当基本的,但我搞不懂 如果form1仍然打开,我想在form2关闭时以编程方式关闭form1。Form2是由form1上的命令按钮打开的 打开Form2的Form1上的代码为: Dim frm As New form2 frm.Show() 当Form2关闭时,关闭任何打开的Form1副本的最佳方法是什么?如果您想独立处理两个表单,您需要从第三个表单或类中监视它们。所以我的建议是在第三个类中创建这两个表单,并将第二个表单的引用传递给第一个表单,这样它就可以打开它。这样: Public C

这是相当基本的,但我搞不懂

如果form1仍然打开,我想在form2关闭时以编程方式关闭form1。Form2是由form1上的命令按钮打开的

打开Form2的Form1上的代码为:

Dim frm As New form2
frm.Show()

当Form2关闭时,关闭任何打开的Form1副本的最佳方法是什么?

如果您想独立处理两个表单,您需要从第三个表单或类中监视它们。所以我的建议是在第三个类中创建这两个表单,并将第二个表单的引用传递给第一个表单,这样它就可以打开它。这样:

Public Class MyHelper

    Public Sub CreateForms()
        Dim form2 as New Form2()
        AddHandler form2.Closed, AddressOf Form2_OnClosed

        ‘ Create as many copies as you need
        Dim form1 as New Form1(form2)
        form1.Show()
    End Sub

    Protected Sub Form2_OnClosed(sender as object, e as EventArgs) 
        ‘ Same code for each form1 that has been created and opened.
        If (form1.IsOpen) Then form1.Close()
    End Sub

End Class


Public Class Form1

    Private _form2 as Form2

    Public Property IsOpen as Boolean = false

    Public Sub New(form2 as Form2)
        _form2 = form2
    End Sub

    Protected Sub MyButton_Click(sender as object, e as EventArgs) handles MyButton.Click
        ‘ You open your form here or wherever you want (even on the constructor)
        _form2.Show()
    End Sub

    Protected Sub Me_OnClosed(sender as object, e as EventArgs) handles Me.Closed
        Me.IsOpen = false
    End Sub

    Protected Sub Me_OnShown(sender as object, e as EventArgs) handles Me.Shown
        Me.IsOpen = true
    End Sub

End Class

添加此引用以使其正常工作

Imports System.Linq

If Application.OpenForms().OfType(Of Form1).Any Then
   MsgBox("Form1 is open")
End If

假设您有3个表单,并希望在单击按钮时关闭另外两个表单

Private Sub EMPLEADOToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EMPLEADOToolStripMenuItem.Click
    If Application.OpenForms().OfType(Of BUSCAR_INDEX).Any Then
        BUSCAR_INDEX.Close()
    ElseIf Application.OpenForms().OfType(Of MIEMBROS_INDEX).Any Then
        MIEMBROS_INDEX.Close()
    End If
    EMP_INDEX.Show()
    EMP_INDEX.EmpIDTextBox.Text = EmpIDTextBox.Text
End Sub

只需为FormClosed事件添加一个事件处理程序并调用我。Close()我正在尝试向form2添加一个事件处理程序,这样当它关闭时,它就会关闭form1(如果form1打开)。Me.Close()将关闭form2,不是吗?如何关闭form1?不,代码属于form1类。很难理解为什么这是一个问题,也许您还不知道AddHandler语句。将AddHandler frm.FormClosed、AddressOf(yadayada)作为您发布的代码段中的第二条语句。添加yadayada方法,它所需要做的就是Me.Close(),那么我如何判断表单是否打开?如果用户可能在form2打开后关闭了它呢?