これが取引です。通常のモジュールの代わりにクラスを使用してみました([私が知っていることとは別に] OOPへの別のアプローチを試みました)。そのため、クラスを使用し、フォームの単純な表示と非表示で、InvalidOperationsException エラーが発生しました。奇妙なことに、OOP パーツを削除し、フォーム自体で他のフォームを直接呼び出してみましたが、同じエラーが発生しました。
エラーは次のとおりです。
フォームの作成中にエラーが発生しました。詳細については、Exception.InnerException を参照してください。エラーは次のとおりです。フォームは、デフォルトのインスタンスからの構築中にそれ自体を参照しました。これにより、無限の再帰が発生しました。フォームのコンストラクター内で、「Me」を使用してフォームを参照します。
コードは次のとおりです。
Private Sub btnNewSales_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNewOrder.Click
'This ought to have opened the new form via a method in the class
'order.NewOrder()
frmNewOrder.Show()
Me.Hide()
End Sub
いずれにせよ、同じエラーが発生します。
代わりにモジュールを使用してみました。コードは次のとおりです。
Public Sub ShowForm(ByVal frmName As String)
If frmName = "Order" Then
frmOrders.Show()
ElseIf frmName = "AddOrder" Then
frmAddOrder.Show()
End If
End Sub
これまでのところ(私のすべてのプログラミング経験では)、これは問題なく動作するはずですが、それでも同じエラーが返されます..
アップデート!
フォーム呼び出しですべての OOP 側面を削除しようとし、モジュールを残して、1 つのフォームでいくつかのコントロールを単に表示または非表示にしました。
モジュール内のコードは次のとおりです。
Public Sub DesignSelect(ByVal design As String) If design = "Basic" Then frmAddOrder.lblD3.Hide() frmAddOrder.cmbD3Color.Hide() frmAddOrder.cmbD3Type.Hide() frmAddOrder.lblD4.Hide() frmAddOrder.cmbD4Color.Hide( ) frmAddOrder.cmbD4Type.Hide()
Else
End If
End Sub
私が間違っている場合は訂正してください。しかし、何も問題はないと思いますよね?
モジュールが使用されたフォームのコードは次のとおりです。
Dim selectedDesign As String = ""
Private Sub frmSalesTrans_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub frmSalesTrans_FormClosing(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.FormClosing
'ShowForm("Order")
frmOrders.Show()
End Sub
Private Sub rdbBasic_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdbBasic.CheckedChanged
selectedDesign = "Basic"
DesignSelect(selectedDesign)
End Sub
上記のフォームを呼び出すフォームのコードは次のとおりです。
Private Sub frmSales_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) MyBase.Load を処理します
End Sub
Private Sub btnNewSales_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNewOrder.Click
Me.Hide()
frmAddOrder.Show()
End Sub
このエラーが発生する理由がわかりません.すべての OOP (サブプロシージャ DesignSelect を含む) を削除すると、問題なく動作します。これについて教えてください...