从类调用表单时的StackOverflow

时间:2012-08-03 14:06:51

标签: c# winforms stack-overflow

当我从班上打电话给我的表格时,我得到StackOverflowException

在我的MainForm我使用Youtube.cs调用Youtube yt = new Youtube();课程。然后在我的Youtube课程中,我使用MainForm调用MainForm main = new MainForm();。我相信这是导致StackOverflow的原因,因为它似乎正在创建一个循环。

我需要从我的Youtube类中MainForm以及MainForm访问Youtube类,所以有没有办法解决这个问题而不会导致StackOverflow?

这是MainForm的顶部:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    Youtube yt = new Youtube();

这是Youtube.cs

的顶部
class Youtube
{
    MainForm main = new MainForm();

3 个答案:

答案 0 :(得分:7)

将表单对象传递给YouTube类,并使用YouTube类中的对象。

public class Youtube
{
     MainForm m_MainForm = null;
     public Youtube(MainForm frm)
     {
            m_MainForm = frm;
     }

}  

答案 1 :(得分:3)

是的,这导致StackOverFlowException

一种方法是通过构造函数将表单传递到Youtube类。


示例:

MainForm课程中的

Youtube yt = new Youtube(this)

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        yt = new Youtube(this);
    }

    Youtube yt = null;
Youtube课程中的

public Youtube(MainForm mainform)
{
    // do something with mainform
}

答案 2 :(得分:3)

您需要将MainForm作为参数传递给YouTube课程。

public class MainForm
{
   private Youtube youtube;
   public MainForm()
   {
       youtube = new Youtube(this);
   }
}

然后在你Youtube类中存储此引用:

public class Youtube
{
   private MainForm form;

   public Youtube(MainForm form)
   {
       this.form = form;
   }
}