2015-09-04 130 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