2017-01-28 5 views
-1

おそらくこれはこれに関する他の質問と重複していると思います。しかし、そうではありませんvb.net - 同じフォームを複数回開く方法サブドメインを使用する

私はこれについていくつかの異なる質問を見ましたが、誰もこれに答えません。

私はフォームを複数回USING A SUBを開くと思います。私がFormを渡して、このフォームの新しいインスタンスを作成します。私もDim newApp As New Formおよびこれらの作業


Dim newApp As New formToOpenしかしどれを試してみました

Public Shared Sub OpenProgram(ByRef formToOpen As Form) 
    Dim newApp As Form 
    newApp = formToOpen 
    Try 
     newApp.Show() 
     newApp.BringToFront() 
    Catch ex As Exception 
     MsgBox("Unable to open program :(") 
    End Try 
End Sub 

を:私はFormで問題が発生して続けるしかし、私はそれを2回実行する場合、これは動作しませんサブある

配置され、

サブを実行してからフォームを閉じてサブを再度実行すると、問題が発生します。

私が手にエラーがある:

に配置されたオブジェクト
オブジェクト名にアクセスできません: 'お店'

shop事前に

おかげ

+0

'shop'は何ですか?あなたのコードにはこの名前のものはありません。 – yogi

+0

ショップはちょうどフォーム – ABPerson

+0

あなたが共有しているコードスニペットは大丈夫だと思われますが、この問題を呼び出すために使用されているコードに問題がある必要があります。 – yogi

答えて

1

オプション1、with generics

Public Function OpenProgram(Of F As {Form, New})(ByVal ThisOne As F) As F 
    Return New F() 
End Function 

オプション2、without generics

Public Function OpenProgram(ByVal ThisOne As Form) As Form 
    Return CType(Activator.CreateInstance(ThisOne.GetType()), Form) 
End Function 

使用方法:2つのボタンと番目とマスタフォームを考える

Dim newApp As Form = OpenProgram(shop) 
newApp.Show 
+0

オプション1は機能しませんでしたが、オプション2が機能しました! – ABPerson

+0

両方とも動作します。あなたはおそらく何か非常に間違っていました。 – GSerg

+0

よくオプション1は完全に空白のフォームを示していましたが、とにかくそれは問題ではありません。 – ABPerson

-1
だけフォームです

"閉鎖された"フォームは、処分するまで閉鎖されません。表示されません。フォームをループして、再度表示するフォームを表示する必要があります。おそらく、このようなものを使用します -

Private Sub cmdOpenForm_Click(sender As Object, e As EventArgs) Handles cmdOpenForm.Click 

    Dim frmCollection = System.Windows.Forms.Application.OpenForms 
    If frmCollection.OfType(Of frmShop).Any Then 
     frmCollection.Item("frmShop").Activate() 
    Else 
     Dim frmShop As New frmShop 
     frmShop.Show() 
    End If 

    Me.Close() 
    Me.Dispose() 
End Sub 

近くに、部品を配置することは、あなたが現在しているフォームを指しているフォームは、あなたがそれらを使用するためにそれらを再度有効にする必要があるか、再作成する必要があるオブジェクトであるため。それらのフォームの新しいインスタンスを再び表示します。

これはあなたが探していたものです。

0

次のコード、および2つの他のフォームでは、ボタンを繰り返しクリックして複数のフォームを開くことができます。

Public Class MasterForm 
    Private Sub btnOpenForm1_Click(sender As Object, e As EventArgs) Handles btnOpenForm1.Click 
     ShowForm(New Form1) 
    End Sub 

    Private Sub btnOpenForm2_Click(sender As Object, e As EventArgs) Handles btnOpenForm2.Click 
     ShowForm(New Form2) 
    End Sub 

    Private Sub ShowForm(WhichForm As Form) 
     With WhichForm 
      .Show() 
      .BringToFront() 
     End With 
    End Sub 
End Class 

enter image description here

+0

あなたはこれを私が答えを得たのと同じように投稿しました – ABPerson

関連する問題