事件处理的本质

2023-05-16

当在点击一个按钮执行某个操作时,你有没有想过,为什么点击了这个按钮就会执行某个操作,这是为什么?那么接下来就让我来解开这里面的秘密。
用微软中定义的事件函数来说明这个问题是再简单不过的的事情了。
首先,点击按钮是一个事件,也就是说,当你点击了按钮就相当于是触发了一个事件,学过C#窗体编程的同学都知道,事件是其中常用一个属性,按钮的触发就使用了这个属性。
不闲谈了,解决实际的问题。
将按钮的整个过程分开为两个过程,1.按钮点击事件发生。2.执行事件函数,完成相应的操作。可以想象一下,这两个过程在分开时都可以方便地实现,第一条只需要创建一个按钮点击区域,来检测鼠标或触碰是否在本按钮区域之内即可,第二条也只需要创建一个事件处理函数即可。关键是怎样在这两点之间架起一个传递信息的桥梁,事件发生时怎样调用事件处理函数。
接下来是干货,话不多说直接上代码:
这是一个窗体程序,实现的基本工能是,创建一个按钮Button,创建一个文本输入框TextBox,创建一个显示文本条Label。程序中预先设置好一个体重基础值weight。当在文本中输入一个数值后,点击button按钮,程序内部判断这个值是大于原先设置的值,还是小于原先设置的值,如果大于原先设置的值就在label中显示“小明变胖了,现在的体重是”同时再把这个值给这个给weight。如果小于这个值就显示“小明变瘦了,现在体重是”同时把这个值给weight。借这个程序来说明按钮的执行本质。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _13._6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public delegate void WeightChangedEventHandler(object sender, EventArgs e);
        class Woman
        {
            #region 构造函数
            public Woman(string n,int a,double w)
            {
                _name = n;
                _age = a;
                _weight = w;
            }
            #endregion

            #region 事件
            public event WeightChangedEventHandler GetFatter;
            public event WeightChangedEventHandler GetThinner;
            #endregion
            #region 属性
            private string _name;           
            public string Name1
            {
                get
                {
                    return _name;
                }
                set
                {
                    _name = value;
                }
            }
            private int _age;
            public int Age
            {
                get
                {
                    return _age;
                }
                set
                {
                    if (value < 15 || value > 60)
                    {
                        throw new ArgumentOutOfRangeException("输入的年龄不合理");
                    }
                    _age = value;
                }
            }
            private double _weight;
            public double Weight
            {
                get
                {
                    return _weight;
                }
                set
                {
                    if (value < 30 || value > 200)
                    {
                        throw new ArgumentOutOfRangeException("输入的体重不合适");
                    }
                    double originalWeight = _weight;
                    _weight = value;
                    if (value > originalWeight)
                    {
                        if (GetFatter != null)
                        {
                            GetFatter(this, EventArgs.Empty);
                        }
                    }
                    else
                    {
                        if (value < originalWeight)
                        {
                            if (GetThinner != null)
                            {
                                GetThinner(this, EventArgs.Empty);
                            }
                        }
                    }
                }
            }
            #endregion
        }
        Woman mary;
        private void Form1_Load(object sender, EventArgs e)
        {

            mary = new Woman("小明", 23, 64.5f);
            mary.GetFatter += new WeightChangedEventHandler(GetfatterHandler);
            mary.GetThinner += GetthinnerHandler;
            System.Console.WriteLine("说明此处是 代码加载时执行的");
        }
        private void GetfatterHandler(object sender,EventArgs e)
        {
            Woman woman = (Woman)sender;
            textBox2.AppendText(woman.Name1 + "变胖了,现在体重" + woman.Weight + "kg.\r\n");
        }
        private void GetthinnerHandler(object sender,EventArgs e)
        {
            Woman woman = (Woman)sender;
            textBox2.AppendText(woman.Name1 + "变瘦了,现在体重" + woman.Weight + "kg.\r\n");
        }

        private void button(object sender, EventArgs e)
        {
            double d;
            if(double.TryParse(textBox1.Text,out d))
            {
                try
                {
                    mary.Weight = d;
                }
                catch (ArgumentOutOfRangeException) { }
            }
        }
    }
}

在weight属性中可以发现调用了事件处理函数,在Form1_Load(object sender, EventArgs e)函数中将对应的事件发生时要执行的函数加载到自身的函数上,这一步才是整个按钮执行的关键一步,这一步利用了事件的装订,来触发相应的事件执行函数。这个函数是在函数执行时直接加载执行的函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

事件处理的本质 的相关文章

  • Inverse elbow manipulator的正逆运动

    Inverse elbow manipulator 该结构同样是6 DOF xff0c 只是后面三个关节不是重合 这样子的结构 xff0c 工作空间更大 正运动好做 xff0c 逆运动还在推导中
  • 使用IMU进行状态估计及进阶

    文章目录 前言基本思想一 姿态估计1 1 通过6轴IMU来进行姿态估计的入门级方法1 1 1 通过加速度计计算姿态1 1 2 引入陀螺仪来得到更好的姿态估计 1 2 四元数解算姿态角解析 二 姿态估算与滤波的关系2 1 状态方程和观测方程2
  • Mujoco-小球建模与控制

    视频教程 xff1a https www bilibili com video BV1e44y1H7Mn 资源请到tiny cc mujoco下载 涉及内容 本次课程制作了一个简单的小球模型 然后对小球进行简单的模拟 xff0c 并演示了一
  • Mujoco-欠驱动的二阶单摆的LQR控制

    MuJoCo Lec7 span class token keyword void span span class token function f span span class token punctuation span span c
  • 四元数姿态计算

    本文基本上就是 1 的注解 一基本概念 1 1 四元数的定义 Quaternion A quaternion is a four dimensional complex number 四元数是一个四维的复数 写成行向量形式的话 q 61 q
  • Mujoco的关节与外力和驱动器

    核心公式 xff1a M qacc 43 qfrc bias 61 qfrc applied 43 ctrl M xff1a 惯性矩阵 qacc 加速度 qfrc bias 科里奥利矩阵和重力矩阵之和 xff1a qfrc bias 61
  • F28069的cpu定时器

    工程搭建参考 xff1a https blog csdn net feisy article details 126380289 F28069有三个32位的CPU定时器 xff1a 0 1 2 0 xff0c 1可用 xff0c 如果程序未
  • TI DSP的中断

    F28069的中断数是96个 xff0c 分为12组 The PIE block can support 96 individual interrupts that are grouped into blocks of eight Each
  • DSP的PWM

    PRD 周期寄存器 xff0c 决定了PWM的周期 频率 CMP 比较寄存器 xff0c 决定了PWM的占空比 CRT 计数寄存器 PWM原理图 为什么需要PWM
  • 出色的html滑动效果库 swiper -例子4 超长单栏横向滑动

    可以用于div滑动 xff0c 图片滑动等切换 例子代码以及所需资源 xff1a http download csdn net detail feisy 6638105 官网例子 xff1a 使用iframe来在同一个页面里面加入了很多各种
  • 【华人学者风采】张祥雨 旷视研究院

    华人学者风采 张祥雨 xff0c 旷视研究院基础模型负责人 研究领域主要为计算机视觉 曾与旷视首席科学家孙剑博士共同发明深度残差网络 ResNet 2020年发表论文 xff1a 22 发表论文 xff1a 58 论文引用数 xff1a 6
  • 出色的html滑动效果库 swiper -例子5 横向自由滑动 可以滑动部分

    可以用于div滑动 xff0c 图片滑动等切换 例子代码以及所需资源 xff1a http download csdn net detail feisy 6638105 官网例子 xff1a 使用iframe来在同一个页面里面加入了很多各种
  • 不要将两个指针变量指向同一块动态内存

    不要将两个指针变量指向同一块动态内存 这个容易引起很严重的问题 如果将两个指针变量指向同一块动态内存 xff0c 而其中一个生命期结束释放了该动态内存 xff0c 这个时候就会出现问题 xff0c 另一个指针所指向的地址虽然被释放了但该指针
  • CMAKE的一些编译选项

    set CMAKE BUILD TYPE 34 Release 34 if CMAKE BUILD TYPE STREQUAL 34 Debug 34 set CMAKE CXX FLAGS 34 CMAKE CXX FLAGS std 6
  • 查看当前系统的glibc版本

    from http my oschina net acmfly blog 77211 有时我们经常需要查看当前系统的glibc版本 xff0c 可以这样查看 xff1a lib libc so 6 有时 xff1a lib x86 64 l
  • 禁忌搜索算法简介

    忌搜索 xff08 Tabu Search或Taboo Search xff0c 简称TS xff09 的思想最早由Glover 1986 提出 xff0c 它是对局部领域搜索的一种扩展 xff0c 是一种全局逐步寻优算法 xff0c 是对
  • 自定义文件格式注册和图标设置

    我们很多时候可能会有这样的一种需求 xff0c 即要生成自己的文件格式 xff0c 然后将这种文件格式注册到操作系统中 xff0c 双击就会使用特定的程序来打开 xff0c 并且我们还想为这种文件格式设置一个图标和缩略 本文章解决的是注册文
  • apache源码分析v2.0

    一 概要 1 平台功能层 xff0c 可移植运行库层 xff0c 核心功能层 xff0c 可选功能层 xff0c 第三方支持库 2 核心功能层 xff1a mod core 处理配置文件中的大部分配置指令 mod so 动态加载其余模块 m
  • Intel英特尔历代经典 CPU 产品回顾

    悉数历史 英特尔历代经典 CPU 产品回顾 从英特尔于 1971 年推出首款 4004 微处理器到现在 xff0c 英特尔处理器已经走过 了 40 个年头 在告别 13 年传奇品牌奔腾之后 xff0c 我们又迎来新一代酷睿 i 双核处 理器

随机推荐

  • vTaskStartScheduler()分析笔记

    FreeRTOS是通过vTaskStartScheduler 函数来启动运行的 xff0c 通常被封装在osKernelStart 中 xff0c 它的工作内容如下 xff1a xTaskCreate 创建空闲任务 xff0c 其优先级为最
  • 在MES中遇到生产异常是怎么处理的

    MES系统在生产过程中 xff0c 难免会遇到各种异常情况 xff0c 如机器故障 材料不足 工人缺席等 xff0c 这些异常情况会影响生产进度和产品质量 那么 xff0c 在MES中遇到生产异常通常是怎么处理的呢 xff1f 1 实时监控
  • ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM

    摘要 ORB SLAM3是第一个能够让单目 立体相机和RGB D相机与针孔和鱼眼镜头模型解耦进行视觉 视觉 43 惯性和多地图SLAM的系统 第一个主要的创新是一个基于特征的紧密集成视觉 43 惯性SLAM系统 xff0c 它完全依赖于最大
  • SVN右键不显示

    安装重启试了很多中方法 xff0c SVN右键始终不显示 方法1 xff08 测试没有出现 xff09 xff08 一 xff09 开始 运行 输入 regedit 进入注册表 xff1b xff08 二 xff09 进入目录 xff1a
  • GPS定位频率最高是多少HZ?

    转载 xff1a https www zhihu com question 41257990 answer 90574977 现在普遍常见的芯片10Hz xff0c ublox好像可以配置到100Hz xff0c 具体是10还是100记不清
  • 总结下-ST2.0库的霍尔角度估计

    1 首先明确一个关系等式 xff0c 看软件就很容易理解 F1代表FOC执行频率 xff08 PWM周期频率 xff09 xff0c 单位是HZ xff1b A代表一个PWM周期内霍尔角度变化量 xff1b AC代表一个电角度周期的角度变化
  • matlab timeserise

    1 xff09 产生timeserise数据 方法一 xff1a 通过timeseries xff0c 例如ts 61 timeseries rand 5 1 rand是产生5 1的矩阵随机数 方法二 xff1a simulink中产生的数
  • 自适应滤波器

    1 LMS Filter模块仿真时 xff0c 输出会发散 xff0c 主要是mu值选取不合适 xff0c 选取比较小的值就可以了 2 可以把网上的m文件通过 matlab coder工具直接转为C文件 xff08 不能直接使用 xff0c
  • 步进电机生成S曲线上位机

    参考的 步进电机S SigMoid 曲线加减速 查表法 Renjiankun的博客 CSDN博客 步进电机s曲线 自己用C 花了大半天搞了一个 xff0c 直接copy生成的数组使用 xff1b 源码可下载步进电机生成S曲线上位机 嵌入式文
  • 电解电容的ESR,想说三句话

    电容的ESR是指电容的等效串联电阻 xff08 或阻抗 xff09 理想的电容 xff0c 是没有电阻的 但是实际上 xff0c 任何电容都有电阻 xff0c 这个电阻值和电容的材料 结构有关系 1 那些 贴片电容 选用贴片电容的时候 xf
  • Matlab2012b&Simulink licence失效解决办法(重复激活解决方案)

    光棍节结束 xff0c math公司也对用户端进行调整 xff0c 很多朋友的matlab都被要求重新添加许可文件 然而 xff0c 基本都是激活完成 xff0c 打开 xff0c 继续激活 xff0c 然后激活完成重复 这是因为激活的文件
  • 航模飞机飞行力效和飞行时间的算法

    力效 xff08 g w xff09 总起飞重量 xff08 g 除起飞功率 xff08 w xff09 例 xff1a 有一架飞机 xff0c 总起飞重量是 8KG xff0c 也就是 8000G xff0c 悬停电流是 40A xff0
  • 5脚继电器的接法

    5脚继电器原理图和接法 一般情况 xff0c 三只脚的那一边中间脚是输出触点的公共端子 xff0c 另外两个引脚是线圈 xff0c 即接驱动端 另外2个脚那边分别是常开和常闭触点 如下图 xff1a A B 脚接驱动电路端 要控制的电路接1
  • Python -- argparse :命令行参数解析模块

    Python argparse xff1a 命令行参数解析模块 官网参考文档 文章目录 Python argparse xff1a 命令行参数解析模块1 总述2 96 add argument 96 2 1 name or flags2 2
  • PWM波控制舵机总结

    文章转载自 https www cnblogs com zhoubatuo p 6138033 html 一 关于舵机 xff1a 舵机 xff08 英文叫Servo xff09 xff1a 它由直流电机 减速齿轮组 传感器和控制电路组成的
  • PNP三极管和NPN三极管的开关电路

    一 三极管开关电路设计的可行性及必要性 可行性 xff1a 用过三极管的人都清楚 xff0c 三极管有一个特性 xff0c 就是有饱和状态与截止状态 xff0c 正是因为有了这两种状态 xff0c 使其应用于开关电路成为可能 必要性 xff
  • Clark变换与Park(派克)变换

    转载https blog csdn net chenjianbo88 article details 53027298 clark变换 xff1a 将abc 变换到 静止 的 坐标系下 Park变换 xff1a 将abc 变换到 旋转 的
  • 无感方波和FOC堵转检测策略参考

    http mcu eetrend com content 2017 100007230 html 基于S12ZVM的车用无传感器BLDC堵转检测方法探讨 judy 发布于 xff1a 周一 07 31 2017 11 05 xff0c 关键
  • kubernetes 快速入门

    文章目录 2 kubernetes 快速入门前言一 nameSpace1 简介2 常用命令查看 nameSpace创建 nameSpace删除 nameSpace 二 pod 与 deployment1 简介2 常用命令查看 pod创建 d
  • 事件处理的本质

    当在点击一个按钮执行某个操作时 xff0c 你有没有想过 xff0c 为什么点击了这个按钮就会执行某个操作 xff0c 这是为什么 xff1f 那么接下来就让我来解开这里面的秘密 用微软中定义的事件函数来说明这个问题是再简单不过的的事情了