2015-06-29 57 views
0

因此,我在我的FormMain.cs中添加了BackGroundWorker對象,並創建了兩種方法來處理事件ProgressChangedRunWorkerCompleted。我發現,我不得不進入ForMain.Designer.cs的方法手動關聯到事件..Winform對象在修改佈局時刪除了事件訂閱

this.bgWorker.WorkerReportsProgress = true; 
this.bgWorker.WorkerSupportsCancellation = true; 
this.bgWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bgWorker_DoWork); 
this.bgWorker.ProgressChanged += bgWorker_ProgressChanged; 
this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted; 

的令人困惑的事情是,如果我改變任何控件都在FormMain.Designer.cs那麼這兩個事件線級我創建的已被刪除,我必須手動將它們添加回來。這包括在設計師身邊移動控制。任何想法爲什麼會發生?

這些都必須添加回手動

this.bgWorker.ProgressChanged += bgWorker_ProgressChanged; 
this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted; 

回答

1

設計師文件是指僅由設計者使用 - 它會被撕掉了,並重新寫爲您在設計師的變化。有通常高於InitializeComponent此評論:

/// <summary> 
/// Required method for Designer support - do not modify 
/// the contents of this method with the code editor. 
/// </summary> 

注意它說不要使用代碼編輯器修改內容。您應該通過設計器UI添加這些事件處理程序,或者應該將它們添加到文件後面的代碼中(partial類的另一半)。

例如,添加他們InitializeComponent後的構造函數被調用:

public partial class MainForm : Form 
{ 
    public MainForm() 
    { 
     InitializeComponent(); 
     this.bgWorker.ProgressChanged += bgWorker_ProgressChanged; 
     this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted; 
    } 
}