2012-08-03 32 views
2

當我從班級調用表單時,我得到StackOverflowExceptionStackOverflow從類中調用表單時

在我的MainForm我打電話Youtube.cs類使用此,Youtube yt = new Youtube();。然後在我的Youtube課程中,我使用MainForm main = new MainForm();調用MainForm。我相信這是什麼導致StackOverflow,因爲它似乎是創建一個循環。

我需要從MainForm訪問Youtube類,也MainForm從我Youtube類那麼有沒有解決這個辦法,而不會導致StackOverflow的?

這是從MainForm頂部:

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

    Youtube yt = new Youtube(); 

這是從Youtube.cs頂部:

class Youtube 
{ 
    MainForm main = new MainForm(); 
+1

可以顯示一些代碼?我們需要看看每個班級如何「訪問」另一個班級 – 2012-08-03 14:08:26

回答

7

通行證表單對象到YouTube類,和YouTube類使用對象。

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

} 
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 
} 
3

你需要通過你的MainFormYouTube類作爲參數。

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; 
    } 
}