65.9K
CodeProject 正在变化。 阅读更多。
Home

事件初学者指南

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.10/5 (10投票s)

2007年6月11日

3分钟阅读

viewsIcon

15906

downloadIcon

144

一篇面向新手的文章,解释了如何通过5个简单步骤制作您总是在 Visual Studio 控件上看到的那些花哨的事件。

引言

您随处可见它们,每个控件都有它们,它们看起来很有用,但新手并不总是理解它们的本质。

这篇文章是一个分步指南,用于制作和使用事件,就像 Visual Studio 制作人员在他们的控件中实现它们的方式一样,所以如果您也想要拥有自己闪亮的黄色闪电功能,请继续阅读 :)。

背景

事件不是任何应用程序的必备品,您可以简单地制作一个执行某些操作的函数并调用它,事件只是在那里,在我看来,为了稍微组织一下您的代码(并让您觉得自己 1337 拥有代码中的事件 :P)。

总之,这就是完成它的方式。

使用代码

我创建了一个包含您需要了解的所有内容的简单项目,并注释了重要内容,您应该能够从那里理解所有内容,所以我会在这里简要解释一下

第 1 步 - 创建一个委托

是的,您总能看到并且从未理解它们是做什么的那些花哨的委托,好吧,简单来说:委托是一个调用另一个函数的函数,或者如果您更喜欢,这里是来自 akadia: 的定义

"C# 中的委托类似于 C 或 C++ 中的函数指针。 使用委托允许程序员将对方法的引用封装在委托对象中。然后可以将委托对象传递给可以调用引用方法的代码,而无需在编译时知道将调用哪个方法。"

总之,这是一个定义委托的例子

public delegate int GotSum(int a, int b);

不复杂,这将接受两个整数作为参数并返回它们的总和。

第 2 步 - 创建一个事件

这是重要部分 - 创建事件本身。 好吧,一个事件有一个固定的结构

[属性] [修饰符] event [类型] 名称

属性:public/private 等。

修饰符可以是以下关键字中的一个或组合:public, private, protected, internal, abstract, new, override, static, virtual 或 extern。

event 是您必须使用的关键字,Type 是事件的类型(在本例中为 "GotSum",我们之前定义的委托)。

现在我们定义我们的事件

public event GotSum GetSum;

第 3 步 - 初始化事件

为了让事件起作用,您需要...让我们称之为将其“绑定”到一个函数,就像您经常看到的那样,您使用 += 来做到这一点(您也可以使用 'add' 和 'remove' 关键字对于事件,但我不会在本文中讨论这一点)

this.GetSum += new GotSum(Form1_GetSum);

够简单了,我猜你以前做过很多次了。

第 4 步 - 创建一个调用事件的函数

注意:这不是必需的,您不必这样做,但这只是 Visual Studio 制作人员在他们的控件中完成的方式(例如,您有一个 OnClick 函数和一个 Click 事件),所以这是我的做法

public int OnGetSum(int a, int b)
{
    // Calls the event and returns what's returned from it.
    return (this.GetSum(a, b));
}

请注意,由于事件本身返回一个整数,因此此函数也返回一个整数(否则它将毫无用处)。

现在,通过使用this.GetSum(a,b); 您使用它作为参数的两个整数调用事件,这可以直接从调用 OnGetSum 的函数完成,但我只是想向您展示它是如何完成的。

当 GetSum 被触发时调用的函数是 Form1_GetSum(我们之前定义的那个),在这里

int Form1_GetSum(int a, int b)
{
    // Returns the sum of the two integers.
    return (a + b);
}

真的很简单,它只是返回两个整数的总和(如果你不明白这一点,你不应该阅读这篇文章)。

第 5 步 - 调用函数

我不会在这里放完整的代码,因为它无关紧要,您可以在附带的项目中看到所有内容,但这是完成这一切的代码片段

this.OnGetSum(FirstNumber, SecondNumber);

也很简单,它使用两个整数调用 OnGetSum 函数(如果你想看看 FirstNumber 和 SecondNumber 是什么,只需下载示例项目)。

关注点

好吧,没什么好说的了,希望这能帮助任何需要知道它的人,如果您有任何问题/评论/建议,请在此处回复。

希望现在任何觉得最后一个标题冒犯的人都满意了。

历史

2007 年 6 月 11 日 - 重新发布文章。
© . All rights reserved.