委托(Delegate)

C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。可以将方法当作另一个方法的参数来进行传递。

委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。

使用委托,必须满足4个条件:

声明委托类型;

必须有一个方法包含了要执行的代码;

必须创建一个委托实例;

必须调用(invoke)委托实例。

声明委托

委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。

public delegate void MyDelegate (string a);

委托调用

必须先实例化委托,然后再调用。

例如:

public delegate void MyDelegate();

//实例化委托

printString ex1 = new MyDelegate();

//委托调用 通过Invoke()调用,或者可以直接省略

ex1.Invoke();

委托的应用

使用Smobiler的自定义控件时,往往需要在自定义控件中自定义事件,这时就可以运用到委托。

自定义控件的创建可自行查看smobiler官网中自定义控件内容。

应用场景,自定义控件中有button控件,需要点击button触发自定义控件的事件。

我们下面直接看下,如何使用:

partial class ExampleButton :Smobiler.Core.Controls.MobileUserControl

{

/// <summary>

/// 在删除按钮点击时发生

/// </summary>

[Description("在删除按钮点击时发生")]

public event EventHandler ButtonPress;

public ExampleButton() : base()

{

//This call is required by the SmobilerUserControl.

InitializeComponent();

}

private void SmobilerUserControl1_Load(object sender, EventArgs e)

{

button1.Press += (obj, args) => { this.OnButtonPress(); };

}

private void OnButtonPress()

{

if (ButtonPress != null) ButtonPress.Invoke(this, new EventArgs());

}

/// <summary>

/// 一个委托,它表示按钮点击时要调用的方法。

/// </summary>

/// <param name="sender">事件源</param>

/// <param name="e">包含事件数据的 DeletePress</param>

/// <remarks></remarks>

public delegate void EventHandler(object sender, EventArgs e);

}

之后可在Form中添加自定义控件查看:



查看自定义控件的事件,我们发现已经添加事件成功:

委托在Smobiler自定义控件中运用的更多相关文章

  1. XAML: 自定义控件中事件处理的最佳实践

    在开发 XAML(WPF/UWP) 应用程序中,有时候,我们需要创建自定义控件 (Custom Control) 来满足实际需求.而在自定义控件中,我们一般会用到一些原生的控件(如 Button.Te ...

  2. winform自定义控件中其他遮挡控件点击事件

    自定义控件在其他窗口调用时,里面的lable阻挡了控件的点击事件 解决方法 自定义控件中lable的 点击事件 private void Lable1_Click(object sender, Eve ...

  3. wpf自定义控件中使用自定义事件

    wpf自定义控件中使用自定义事件 1 创建自定义控件及自定义事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 ...

  4. C#中的自定义控件中的属性、事件及一些相关特性的总结(转)

      摘要: C#中的自定义控件中的属性(Property).事件(Event)及一些相关特性(Attribute)的总结 今天学习了下C#用户控件开发添加自定义属性的事件,主要参考了MSDN,总结并实 ...

  5. 【转】WebResource实现在自定义控件中内嵌JS文件

    在类库中的资源  其他项目中要使用 需要嵌入才行 参考文献:WebResource实现在自定义控件中内嵌JS文件 1. WebResource简介 ASP.NET(1.0/1.1)给我们提供了一个开发 ...

  6. 【Win 10应用开发】AdaptiveTrigger在自定义控件中是可以触发的

    前些天,看到有网友给我留言,说AdaptiveTrigger在自定义控件(模板化控件)中不能触发.因为当时我正在写其他的代码,就没有去做实验来验证,于是我就给这位网友提了使用GotoVisualSta ...

  7. 委托事件和jquery中的delegate方法

    利用事件冒泡的特性,给父元素绑定事件,然后判断事件对象,来给父元素的每个子元素添加事件,而不是直接在所有的子元素上绑定事件: <ul> <li></li> < ...

  8. c#自定义控件中的事件处理

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...

  9. Winform中用户自定义控件中外部设置子控件属性的方法

    假设我们新建立一个用户自定义控件,由一个lable1和pictureBox1组成 此时我们在外部调用该控件,然后想动态改变lable1的值,我们该怎么办? 假设实例化的用户控件名为UserContro ...

随机推荐

  1. 微信小程序之登录页实例

    项目效果图: 目录结构: login.wxml: <view class="container"> <view class="login-icon&qu ...

  2. React路由配置

    React路由简单配置 //入口文件index.js import React from 'react'; import ReactDom from 'react-dom'; import { Rou ...

  3. CSS position财产

    CSS在position位置信息要素用于表示属性. 有三个起飞值:static, absolute, relative. 假设元件不显式配置position财产,该元素默认position 值至sta ...

  4. UVA 10869 - Brownie Points II(树阵)

    UVA 10869 - Brownie Points II 题目链接 题意:平面上n个点,两个人,第一个人先选一条经过点的垂直x轴的线.然后还有一个人在这条线上穿过的点选一点作垂直该直线的线,然后划分 ...

  5. Gtk+/Gtkmm介绍与安装(有继承关系图)

    GTK+是一套跨平台的,以C语言编写的GUI类库,它起源于GNU的图像处理程序"GIMP",因而被起名为"The GIMP Toolkit",从一开始它就被设计 ...

  6. Jmeter 专题

    Jmeter是一个非常好用的压力测试工具.  Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好. 为什么要建立线程组?原因很简单,因为我们要模拟多个线程(用户 ...

  7. Math.Round四舍五入说明

    Math.Round默认采用的不是四舍五入法, 而是四舍六入的银行家算法, 如何找回四舍五入法? Math.Round默认采用的不是四舍五入法, 而是四舍六入的银行家算法,  也就是四舍六入五考虑,五 ...

  8. WPF 寻找数据模板中的元素

    <Window x:Class="Wpf180706.Window11"        xmlns="http://schemas.microsoft.com/wi ...

  9. js onload事件使用

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  10. Html5 学习系列(四)文件操作API

    原文:Html5 学习系列(四)文件操作API 引言 在之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很难进行跨平台.或者跨 ...