这是交易。我尝试使用类而不是通常的模块(试图尝试不同的方法[除了我所知道的]到OOP)。所以我使用了类,在一个简单的显示和隐藏表单中,我得到了一个InvalidOperationsException错误。发现了,我删除了OOP部分,只是尝试直接在表单上调用另一个表单,但仍然遇到了同样的错误。
这是我得到的错误:
创建表单时出错。有关详细信息,请参阅Exception.InnerException。错误是:表单在构造期间从默认实例引用自身,这导致无限递归。在Form的构造函数中,使用'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方面,并使模块只显示或隐藏一个表单中的某些控件。
以下是模块中的代码:
Public Sub DesignSelect(ByVal design As String) 如果design =“Basic”那么 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),它工作正常。请在此启发我...