2011-03-04 101 views
0

從我涉足C#的時間已經很長時間了,但我有一段時間讓我的form_load觸發。這是我無法想象的最簡單的事情爲什麼它不會開火!任何援助將不勝感激。Form1_Load即使在添加處理程序後也不會觸發

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace AppName_v4._0___TestRoom_Addon{ 
    public partial class Form1 : Form{ 

     public Form1() { 
      InitializeComponent(); 
      this.Load += new EventHandler(this.Form1_Load); //FIRES! 
     } 

     private void Form1_Load(object sender, EventArgs e) { 
      webKitBrowser1.Dock = DockStyle.Fill; //DOES NOT FIRE! 
      webKitBrowser1.Navigate("http://192.168.0.10/?zoneid=11"); 
     } 

    } 
} 

UPDATE

  • 我用的斷點,以驗證該行是不是他
  • 形式確實顯示 Screenshot of resulting Form

我自己也嘗試沒有以下成功...

namespace AlphaEntry_v4._0___MailRoom_Addon{ 
    public partial class Form1 : Form{ 

     public Form1() { 
      InitializeComponent(); 

     } 

     protected override void OnLoad(EventArgs e) 
     { 
      webKitBrowser1.Dock = DockStyle.Fill; 
      webKitBrowser1.Navigate("http://192.168.0.10/?zoneid=11"); 

      base.OnLoad(e); 
     } 


    } 
} 

UPDATE#2我能夠通過刪除並重新添加對WebKit控件的引用來獲得此工作。不知道發生了什麼事。感謝大家。

+0

您是否已通讀輸出窗口中的信息? – jac 2011-03-04 18:44:36

+0

@Beaner:是的,我看到錯誤,但即使沒有'webKitBrowser1。*'代碼也沒有調用該函數。 – Dutchie432 2011-03-04 18:48:07

+0

@Beaner:更正:這些都是舊錯誤,現在不會顯示我清除了我的輸出窗口。仍然沒有'Form1_Load()' – Dutchie432 2011-03-04 18:49:32

回答

3

我能夠通過移除並重新添加對WebKit控件的引用來獲得此工作。不知道發生了什麼事,但John Arlen的評論引導我朝着正確的方向前進。感謝大家。

2

這是最簡單的事情,我可以想象爲什麼它不會開火!

我懷疑問題不是它「不會觸發」,而是說有問題的代碼沒有按照您懷疑的方式處理事情。

嘗試在「* .Dock」行上設置斷點。鑑於上面的代碼,只要您顯示此表單,應該立即觸發它。但是,因爲這是一個Form.Load事件,所以直到表單實例通過form.Show()實際顯示爲止纔會發生。

+0

我應該指定,但我已經使用斷點來確定代碼從來沒有被打中,當然。這是項目中唯一的形式,也是啓動對象。您在這裏看到的代碼是迄今爲止的整個項目! – Dutchie432 2011-03-04 18:36:58

+0

@ Dutchie432:是否顯示錶單? – 2011-03-04 18:37:48

+0

是的。屏幕截圖:http://img200.imageshack.us/img200/3502/78122191.png – Dutchie432 2011-03-04 18:42:57

4

一般來說,更好的方法是處理內部事件的重寫虛擬方法,而不是註冊觸發事件。

protected override void OnLoad(EventArgs e) 
{ 
    // Your code here 

    base.OnLoad(e); 
} 

如果沒有調用,會很有趣。

+0

我想我已經按照你的建議實現了代碼,但仍然沒有結果。看上面的更新。 – Dutchie432 2011-03-04 18:53:14

+0

結束了沒有解決問題,但一個好的指針無所謂。 +1 – Dutchie432 2011-03-04 19:26:33

+0

我在OnLoad中添加了一個斷點,並發現我在那裏發生錯誤。這阻止了調用加載事件。所以謝謝你的提示。 – toddmo 2014-11-05 16:14:28

4

這裏有一個解決方法:

InitializeComponent();後直接插入你的代碼。
完成此調用後,表單的專用字段將被初始化,您可以與UI對象進行交互。

我知道這並不直接回答問題,但它應該在大多數情況下工作。

0

它不會觸發的另一個原因是如果您使用DataBindings並因爲您更改了屬性名稱或刪除的屬性而出現錯誤。

5

我剛剛解決了同樣的問題。根本原因應該是Form1加載時Form1_Load事件未被觸發。只需在Designer視圖中打開Form1,單擊Form1的標題,在Form1的屬性下單擊'Event'標籤,在屬性列表中找到'Load',您將在其右側找到事件列表。選擇'Form1_Load',重建它。您可以通過選擇Form1_Load以外的任何事件來檢查Form1_Load()是否被調用。

+0

我剛剛有同樣的問題 - 表單顯示沒有Form1_Load被稱爲 - 和斯坦你的答案解決了它!謝謝! – Resource 2015-11-09 09:16:47

2

我來到這裏是爲了完全相同的問題。只要我看到更新:

我能夠通過刪除並重新添加對WebKit控件的引用來得到這個工作。不知道發生了什麼事。感謝大家。

我意識到我的情況出了什麼問題。和斯科特一樣,我也沒有做過任何C#,並忘記了一個關鍵細節。

我想要一些簡單的示例代碼來檢查listview是否按我需要的方式工作。最好的文檔是工作代碼,所以我複製了https://www.dotnetperls.com/listview的樣本。解決了VS2010並將代碼粘貼到Visual Studio爲我生成的表單程序中。將它運行並得到完全一樣的東西斯科特 - 空白列表的空白表單。

原因是,在Visual Studio中,當您將控件添加到窗體時,您不會自動獲取所有事件處理程序 - form_load是缺少的處理程序之一。你得到的代碼來繪製控制,就是這樣。爲了告訴Windows你有一個處理表單加載事件,你必須添加

this.Load + = new System.EventHandler(this.Form1_Load);

到窗體的InitializeComponent中的代碼。當我將控件添加到表單時,該行缺失,所以我的處理程序沒有被調用。

您可以手動添加行或進入Visual Studio中的設計窗口,然後單擊表單的空白部分。你會看到一個新的空存根,自動生成的,看起來像:

私人無效Form1_Load_1(對象發件人,EventArgs的)

{

}

下劃線-1因爲我已經有了無法使用的Form1_Load例程,所以加上了名字。

如果您再檢查form1.designer.cs代碼,您會看到this.load + = ....行已被添加到初始化代碼中。

有時候簡單的示例代碼並不那麼簡單。

0

今天遇到這個,一開始感到困惑。在閱讀了這個和類似的建議解決方案後,我的神祕感就被打開了。

第一:我如何快速確定我的問題 - 我將this.Load事件註冊作爲InitializeComponent()的第一行移動到設計器生成的代碼中。然後我達到了斷點。然後,我打開所有拋出的異常(包括本機)的「中斷」。這導致我直接面對這個問題。

在我的情況下,包含一個網絡控件導致負載發生在一個令人驚訝的早期時刻,就在施工之後;因爲我的代碼是在頁面在用戶界面中最終被激活時發生的假設Load的情況下編寫的。它依賴於尚未建立的狀態變量。

其他問題,例如缺少依賴延遲的DLL,上游Load handler中的異常等都可以通過這種方式進行跟蹤。

修復後,我將this.Load()移回原來的位置。

相關問題