Vb.net System.StackOverflowException未处理-尝试调用表单时,我遇到此错误

Vb.net System.StackOverflowException未处理-尝试调用表单时,我遇到此错误,vb.net,forms,exception,recursion,Vb.net,Forms,Exception,Recursion,嗨,当我运行这个代码时,我得到了上面的错误。当我尝试运行一个有3个窗体的VBNet程序时 我只是试图将列表项从一个表单传递到另一个表单,但在程序编译之前,我遇到了一个错误 Public Class frmCart Dim frmComic As New comicBooks Dim frmAudio As New audioBooks Public decSubTotal As Decimal Private Sub ShowToolStripMenuItem_Click(sende

嗨,当我运行这个代码时,我得到了上面的错误。当我尝试运行一个有3个窗体的VBNet程序时

我只是试图将列表项从一个表单传递到另一个表单,但在程序编译之前,我遇到了一个错误

Public Class frmCart


Dim frmComic As New comicBooks
Dim frmAudio As New audioBooks

Public decSubTotal As Decimal



Private Sub ShowToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ShowToolStripMenuItem.Click

    frmComic.ShowDialog()

End Sub


Private Sub ShowDialogToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ShowDialogToolStripMenuItem.Click
    frmAudio.ShowDialog()
End Sub
末级

现在,金融经济正在复苏

Public Class comicBooks

Dim frmCartForm As New frmCart

Public decPrice1 As Decimal = 20.95D
Public decPrice2 As Decimal = 10.50D


Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click

    Select Case lstComicBooks.SelectedItem

        Case "Comic #1 (Print)"
            frmCart.lstProductsSelected.Items.Add("Comic #1")
            frmCart.decSubTotal += decPrice1
        Case "The History of Scotland (Print)"
            frmCart.lstProductsSelected.Items.Add("Comic #2")
            frmCart.decSubTotal += decPrice2
        Case Else
            MessageBox.Show("Please select a Comic")
    End Select

End Sub
末级

如果我只调用一次对话框,我不知道为什么它是递归的

谢谢

类comicBooks实例化一个新的frmCart。 frmCart实例化一个新的comicBooks 返回到1
删除comicBooks中的frmCartForm声明要避免递归,应将frmCart的当前实例传递到构造函数中的comicBooks类中。大概是这样的:

Public Class frmCart
    Dim frmComic As New comicBooks(Me)   '<--- Pass current form into constructor
End Class

Public Class comicBooks

    Dim frmCartForm As frmCart  '<--- variable to hold passed in form instance

    Public Sub New(cartForm As frmCart)    '<--- Constructor to take instance of form
        Me.frmCartForm = cartForm          '<--- Assign passed in reference to our variable
    End Sub

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
        'Use frmCartForm here
    End Sub
End Class

那么我应该把所有的实例放在一个模块中吗。。。我真的不知道你的应用程序应该如何工作,但不,我不建议这样做。我想冒昧地猜测一下,你是一名VB6开发人员。现在表单的工作方式不同了。表单不是设计上的单例。在一个类和另一个类中引用表单不会引用同一个表单,除非它是全局声明的对象,或者您正在将对象从一个类传递到另一个类。创建表单实例变量frmCartForm,然后继续使用默认实例frmCart。在另一种形式中相同-不使用汽车。很高兴知道它在哪条线上坠毁。