2015-09-04 83 views
0

我需要幫助理解爲什麼我需要在下面這行代碼,並且它有什麼作用:爲什麼我需要那條線? (C#)

this.FormClosing += new FormClosingEventHandler(Form1_FormClosing); 

如果我不添加該行,保存從未發生過。這就像Form1_FormClosing函數中的代碼不會執行一樣,因此程序始終以默認值開始。但是我從來不需要爲其他事件(如buttonclicks等)使用這樣的事情,他們在沒有它的情況下工作得很好。爲什麼這個不同?

public Form1() 
{ 
    InitializeComponent(); 
    this.Location = Settings.Default.WindowLocation; 
    this.FormClosing += new FormClosingEventHandler(Form1_FormClosing); 
} 
private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    Settings.Default.WindowLocation = this.Location; 
    Properties.Settings.Default.Save(); 
} 

btw對不起,這個愚蠢的問題,但我不知道任何關於C#(或編程...)。我只想爲我的程序寫一個簡單的GUI。現在,當我發現我需要這條線時,它完美地工作了......我只想了解爲什麼。

+0

所有有關決定。它是一個在表單關閉時觸發的事件。我認爲這將節省工作 –

+0

[事件教程MSDN](https://msdn.microsoft.com/en-gb/library/aa645739(v = vs.71).aspx)... – Sayse

+4

「他們工作得很好,沒有它「 - 不,看看設計師的代碼 - 你會發現那裏的事件處理程序。類似於this.FormClosing的行由表單設計器編寫,如果您看到「幕後」場景(像* .Designer.cs這樣的文件),您可以看到它 –

回答

1

FormClosing事件發生在用戶,通過用戶界面(UI)或通過調用方法(如Form類中的Close或Application類中的Exit)以編程方式關閉表單之前。這個事件可以被取消。

當您創建FormClosingEventHandler委託時,您將標識將處理該事件的方法。要將事件與事件處理程序相關聯,請將該委託的實例添加到事件中。事件處理程序在事件發生時被調用,除非您刪除委託。

在C#委託是類似於在C或C的函數指針++。使用委託允許程序員在委託對象中封裝對方法的引用。然後可以將委託對象傳遞給可以調用引用方法的代碼,而無需在編譯時知道哪個方法將被調用。與C或C++中的函數指針不同,代表是面向對象的,類型安全的和安全的。

委託聲明定義了一種封裝具有特定參數集和返回類型的方法的類型。對於靜態方法,委託對象封裝了要調用的方法。對於實例方法,委託對象在實例上封裝實例和方法。如果您有委託對象和一組適當的參數,則可以使用參數調用委託。

委託的一個有趣和有用的屬性是它不知道或關心它引用的對象的類。任何對象都會做;重要的是該方法的參數類型和返回類型與委託的匹配。這使代表非常適合「匿名」調用。

委託可以被看作是一個佔位符/一些方法(一個或多個)。

通過定義一個委託,你對你的類的用戶說:「請隨意把任何匹配這個簽名的方法放在這裏,每次調用我的委託時都會調用它。

典型的應用是當然的事件。所有的OnEventX委託給用戶定義的方法。

代表可以爲用戶提供一些定製其行爲的功能。大多數情況下,您可以使用其他方式來實現相同的目的,我不認爲您可能會被迫創建代表。這只是在某些情況下完成任務的最簡單的方法。

Refrence從FormClosingEventHandler MSDNDelegate MSDN