25

より多くの知識を得るためにこの質問をします。フォームがアプリケーションで開かれているかどうかを確認するにはどうすればよいですか。フォームを再度開かないようにするために、実行中に同じフォームのインスタンスを作成しないことを意味します

   Dim frmCollection As New FormCollection()
    frmCollection = Application.OpenForms()
    If frmCollection.Item("Form2").IsHandleCreated Then
        MsgBox("Yes Opened")
    Else
        Dim f As New Form2()
        With f
            .Text = "form2"
            .Show()
        End With
    End If

このコードを何度も実行すると、フォーム Form2 のインスタンスがさらに作成されます このフォームがまだ開かれていないかどうかを確認するにはどうすればよいですか

4

8 に答える 8

50

あなたはこのようにそれを試すことができます:

 Imports System.Linq ' need to add 


If Application.OpenForms().OfType(Of Form2).Any Then
  MessageBox.Show("Opened")
Else
  Dim f2 As New Form2
  f2.Text = "form2"
  f2.Show()
End If
于 2013-03-15T18:23:12.400 に答える
12

次のコードを使用できます。

If myForm.IsHandleCreated then
   myForm is open
End If
于 2013-12-20T20:47:59.440 に答える
3

As an extension of the answers given (thank you, all), here's a simple way to activate or show:

Dim frmCollection = System.Windows.Forms.Application.OpenForms
If frmCollection.OfType(Of Form2).Any Then
    frmCollection.Item("Form2").Activate()
Else
    Dim newForm2 = New Form2
    newForm2.Show()
End If
于 2015-01-10T03:37:38.610 に答える
2

HumbleBeginnings によって開始されたものからの別のリファクタリング方法:

    Dim xChildWindows = Application.OpenForms.OfType(Of frmForm2)
    If xChildWindows.Any Then
        xChildWindows.First().Focus() 'Focus if exists
    Else
        Dim xfrmNew As New frmForm2() 'Open window if doeasn't exists
        xfrmNew.MdiParent = Me
        xfrmNew.Show()
    End If
于 2016-02-12T18:08:31.447 に答える
0

あなたはこれを試すことができます

Dim formText As String
Dim prevText As String

 Private Sub OpenForm(ByVal frm As Windows.Forms.Form)
        formText = frm.Text
        If formText = prevText Then Exit Sub
        CloseForms()
        ' Make it a child of this MDI form before showing it.
        frm.MdiParent = Me
        frm.Show()
        frm.Location = New Point(0, 0)
        prevText = formText
    End Sub

    Private Sub CloseForms()
        For Each ChildForm As Form In Me.MdiChildren
            ChildForm.Close()
        Next
    End Sub

    Private Sub NewToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PayablesToolStripMenuItem.Click
            OpenForm(frmPayables)
        End Sub
于 2016-12-13T17:15:37.873 に答える