2015-05-26 123 views
0

我忙於在C#中涉及2個Windows窗體的項目。 該程序要求用戶在文本欄中輸入主題,然後用戶從3個網站中進行選擇以搜索並顯示視頻。System.NullReferenceException將變量傳遞給另一個類/窗體

這是第一種形式的代碼,

private void btnSearch_Click(object sender, EventArgs e) 
{ 
     //Assign Search 
     Search = SearchBox.Text; 
     //Assign Website 
     if (rb1YouTube.Checked) 
     { 
      WebSite = 1; 
     } 
     else if (rb2MetaCafe.Checked) 
     { 
      WebSite = 2; 
     } 
     else if (rb3Yahoo.Checked) 
     { 
      WebSite = 3; 
     } 
     //Assign Category 
     Category = " - " + cbCategory.Text; 
     //Input Validation 
     if (Search == "" || Category == " - " || WebSite == 0) 
     { 
      System.Windows.Forms.MessageBox.Show("All fields require values"); 
     } 
     else 
     { 
      //Declare class and pass variables 
      Results RF = new Results(Search, WebSite, Category); 
      RF.Show(); 
     } 
    } 

這裏是從第二個代碼。

public Results(String Search, int WebSite, String Category) 
{ 
    try 
    { 
     switch (WebSite) 
     { 
      case 1: webBrowser1.Navigate("https://www.youtube.com/"); 
       break; 
      case 2: webBrowser1.Navigate("http://www.metacafe.com/"); 
       break; 
      case 3: webBrowser1.Navigate("https://screen.yahoo.com/"); 
       break; 
     } 
    } 
    catch(Exception E)   
    { 
     MessageBox.Show(" " + E); 
    } 
    InitializeComponent(); 
} 

將值傳遞到新窗體後,通過開關/大小寫運行後,會發生錯誤。

我已經調試了程序,並在public Results(String Search, int WebSite, String Category)行上有了一個斷點,我確保這些值正在發送和接收。

回答

4

移動InitializeComponent()切換前的方法調用。我想webBrowser1尚未初始化,其值爲null當您調用Navigate(...)方法。

+1

這是你的答案。初始化組件通過您的designer.cs類運行並初始化所有控件。因此,當你的代碼運行後,像webBrowser1這樣的東西將是空的...因此NullReferenceException。剪切+粘貼並固定。 –

+1

@MarkMcGookin確實如此。 –

+0

'InitializeComponent'不應該在方法*中,它應該只在構造函數中。 –

相關問題