C# 事件处理方法

标签 c# event-handling

自从我开始学习 C# 以来,我看到了几种处理事件的方法。假设我有一个像这样的 XAML 按钮:

<Button x:Name="button" Content="Click me!"/>

鉴于此按钮,我可以通过多种方式连接点击事件:

  1. 修改按钮的 Click 属性,使其指向后面代码中的一个方法,例如:

    <Button x:Name="button" Content="Click me!" Click="button_Click"/>
    

    然后将 button_Click 方法添加到代码中:

    private void button_Click(object sender, RoutedEventArgs e)
    {
        button.Content = "Ow >_<";
    }
    
  2. 在后面的代码中通过委托(delegate)处理事件:

    button.Click += delegate 
    {
        button.Content = "Ow >_<";
    };
    
  3. 在后面的代码中通过 lambda 表达式处理事件:

    button.Click += (object sender, RoutedEventArgs e) =>
    {
        button.Content = "Ow >_<";
    };
    

鉴于这三种方法,我有几个问题:

  • 这些方法之间的根本区别是什么。
  • 是否有任何情况应该使用一种方法而不是另一种方法。我看到类型 1 主要用于 WPF 和 WinRT 应用程序,但其他两种我只在使用 Xamarin 时才真正看到。

最佳答案

  1. 不特定于 WPF 或 WinRT,在 GUI 设计器中的 .NET 中,单击控件以连接默认事件或单击 visual studio 的属性窗口中的事件是典型的。大多数时候,这就是您将事件连接到控件的方式。当您在运行时创建动态控件时,您通常使用 2. 或 3. 连接事件,事件本身并没有什么不同,但是它们在应用程序生命周期中创建的阶段对 2 有很大的影响..和 3..

关于C# 事件处理方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32555701/

相关文章:

c# - 如何杀死主线程?

c# - 如何在 c#/.net 中记录抛出的异常

C#: Datagridview 不显示数据

c# - Visual Studio 中的圈复杂度

javascript - 无法在 Firefox 上关闭 on change 事件中的 alert()

javascript - 如何组织多个 View 使用的 Backbone 模型?

C#:有什么理由不应该声明事件支持字段 protected ?

c# - Xamarin iOS,在代码后面添加 WKWebView,部署后没有任何反应

java - Cellbrowser 在单元格上单击事件

javascript - 在 Chaplin js 框架中,以 ! 为前缀的事件是做什么的?意思?