关于C#中GUI编程的标准事件问题

前言

昨天的文章,带大家简单学习C#中的事件,了解订阅者和发布者之间的逻辑关联,也通过小案例进行实际操作,可以看到具体的输出结果。

目前在工作中,使用Winform桌面开发比较多,很多时候就会用到事件,此时这里的事件用法有一个俗称叫GUI编程。

在程序运行时,它可以在任何时候被打断,比如按钮点击,按下按键或系统定时器。在这些情况发生时,程序需要处理事件然后继续其他事情。

在Windows GUI编程中经常会用到程序事件的异步处理。

什么是GUI中的标准事件

这种程序事件.NET框架提供一个标准模式。使用System命名空间下的EventHandler委托类型。

public delegate void EventHandler(object sender,EventArgs e)

其中关于声明EventHandle委托类型,这里需要注意以下三点:

  • 第一个参数用于保存触发事件的对象的引用
  • 第二个参数用于保存状态信息,指明什么类型适用于该应用程序
  • 返回类型是void

关于第二个参数类型EventArgs这里特别需要说明下,它不是为了传递参数而设计的,当它用于不需要传递参数的事件处理程序时该忽略,如果需要传递参数那么就必须声明一个派生自EventArgs的类,使用合适的字段来保存需要传递的数据

不管参数使用的实际类型是什么,Object类和EventArgs类都是基类。这样EventHandler就可提供一个对所有事件和事件处理器都通用的签名,只有两个参数,而不是各自都有不同的签名。

标准事件的用法

这里还继续对昨天文章中的案例进行修改,阿辉订阅了报社的报纸,当报社发报时,阿辉就能收到报纸进行阅读。
这里需要注意:

  • 声明系统定义时使用EventHandler替换Handler
  • 阿辉订阅者中的事件处理程序签名应和事件委托的签名匹配(不传递数据时可忽略)
  • 触发事件的代码在调用时必须使用适当的参数类型对象

报社

 /// <summary>
    /// 报社
    /// </summary>
    class NewspaperOffice
    {
        public event EventHandler StartPublishPaper;                //1、声明事件

        public void Publish()
        {
            Console.WriteLine("已发布报纸!");
            StartPublishPaper(this,null);               //3、触发事件,通知订阅者收报纸进行阅读
        }
    }

阿辉订阅者

 /// <summary>
    /// 阿辉 订阅者
    /// </summary>
    class AhuiPeople
    {
        public AhuiPeople(NewspaperOffice npo)
        {
            npo.StartPublishPaper += SubscriptinPaper;            //2、订阅事件
        }

        void SubscriptinPaper(object sender,EventArgs e)
        {
            Console.WriteLine("阿辉接收到报纸,开始阅读!");
        }
    }

触发事件开始发报

 static void Main(string[] args)
        {
            NewspaperOffice npo = new NewspaperOffice();
            AhuiPeople ahuiPeople = new AhuiPeople(npo);

            //报社发报
            Console.WriteLine("报社计划开始发报!");
            npo.Publish();
            Console.ReadKey();
        }

输出结果

这里简单介绍标准的GUI编程中的事件,没有用于传递参数。下一篇文章将介绍如何通过标准事件来传递参数用于Winform中的异步处理。

到此这篇关于C#中GUI编程的标准事件的文章就介绍到这了,更多相关C# GUI编程内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C# Guid长度雪花简单生成器的示例代码

    标准的long雪花长度为64bit,还要浪费1bit,然后41位时间,10位workid,12位序列 guid长度128位,64位完整的时间tick,32位workid,32位序列,可谓随便用满非常豪华 也就是系统里可以根据需要有的地方存随机guid,有的地方存雪花guid,随便换 随后还有提取时间的方法,由于是64位完整时间,直接拿出来转时间就好了 这个类参考别人的代码,如果需要设计更完善的guid雪花,可以在github上或者nuget上找newid这个项目,老外写好的更完善的做法 publ

  • C# 中GUID生成格式的四种方法

    C#中GUID的生成以及格式 1.GUID是在System命名空间下的结构(struct)体,下面展示实例. (1)创建一个GUID帮助类(GUIDHelper) using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebDemo.guid { public class GuIdHelper { /// <summary> /// GUID生成 /// &l

  • C# GUID ToString的使用总结

    最近在看到小伙伴直接使用 Guid.ToString 方法,我告诉他需要使用 Guid.ToString("N") 的方式输出字符串 ,为什么需要使用 N 这个参数呢,因为默认的是参数 D 在输出的时候会出现连字符 Guid 是 Globally Unique Identifier 全局唯一标识符的缩写,是一种由算法生成的唯一标识,在 C# dotnet 里面的 Guid 类是微软的UUID标准的实现. Guid.ToString 里面可以添加下面几个参数,"N",

  • 关于C#中GUI编程的标准事件问题

    前言 昨天的文章,带大家简单学习C#中的事件,了解订阅者和发布者之间的逻辑关联,也通过小案例进行实际操作,可以看到具体的输出结果. 目前在工作中,使用Winform桌面开发比较多,很多时候就会用到事件,此时这里的事件用法有一个俗称叫GUI编程. 在程序运行时,它可以在任何时候被打断,比如按钮点击,按下按键或系统定时器.在这些情况发生时,程序需要处理事件然后继续其他事情. 在Windows GUI编程中经常会用到程序事件的异步处理. 什么是GUI中的标准事件 这种程序事件.NET框架提供一个标准模

  • Python GUI编程学习笔记之tkinter事件绑定操作详解

    本文实例讲述了Python GUI编程学习笔记之tkinter事件绑定操作.分享给大家供大家参考,具体如下: 相关内容: command bind protocol 首发时间:2018-03-04 19:26 command: command是控件中的一个参数,如果使得command=函数,那么点击控件的时候将会触发函数 能够定义command的常见控件有: Button.Menu- 调用函数时,默认是没有参数传入的,如果要强制传入参数,可以考虑使用lambda from tkinter imp

  • Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解

    本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox.filedialog控件用法.分享给大家供大家参考,具体如下: 相关内容: messagebox 介绍 使用 filedialog 介绍 使用 首发时间:2018-03-04 22:18 messagebox: 介绍:messagebox是tkinter中的消息框.对话框 使用: 导入模块:import tkinter.messagebox 选择消息框的模式: 提示消息框:[返回"ok"] tkint

  • 简单讲解Android开发中触摸和点击事件的相关编程方法

    在Android上,不止一个途径来侦听用户和应用程序之间交互的事件.对于用户界面里的事件,侦听方法就是从与用户交互的特定视图对象截获这些事件.视图类提供了相应的手段. 在各种用来组建布局的视图类里面,你可能会注意到一些公共的回调方法看起来对用户界面事件有用.这些方法在该对象的相关动作发生时被Android框架调用.比如,当一个视图(如一个按钮)被触摸时,该对象上的onTouchEvent()方法会被调用.不过,为了侦听这个事件,你必须扩展这个类并重写该方法.很明显,扩展每个你想使用的视图对象(只

  • 简单介绍利用TK在Python下进行GUI编程的教程

    我想要向您介绍能想像到的开始 GUI 编程的最简单方法,就是使用 Scriptics 的 TK 和 Tkinter 封装器.我们将与 developerWorks 中的 "Python 中的 curses 编程" 提到的 curses 库进行很多比较.除了 curses 实现文本控制台而 TK 实现 GUI 这一差别之外,这两个库有着惊人相似的接口.在使用任何一个库之前,需要基本了解窗口和事件循环,并参考可用的窗口小部件.(好,好的参考和适量的练习.) 如同关于 curses 的文章,

  • jQuery中的编程范式详解

    本文详细分析了jQuery中的编程范式.分享给大家供大家参考.具体如下: 浏览器前端编程的面貌自2005年以来已经发生了深刻的变化,这并不简单的意味着出现了大量功能丰富的基础库,使得我们可以更加方便的编写业务代码,更重要的是我们看待前端技术的观念发生了重大转变,明确意识到了如何以前端特有的方式释放程序员的生产力.这里将结合jQuery源码的实现原理,对javascript中涌现出的编程范式和常用技巧作一简单介绍.   1. AJAX: 状态驻留,异步更新 首先来看一点历史. A. 1995年Ne

  • Java GUI编程实现在线聊天室

    引言 综合应用Java的GUI编程和网络编程,实现一个能够支持多组用户同时使用的聊天室软件.该聊天室具有比较友好的GUI界面,并使用C/S模式,支持多个用户同时使用,用户可以自己选择加入或者创建房间,和房间内的其他用户互发信息(文字和图片) 主要功能 客户端的功能主要包括如下的功能: 选择连上服务端 显示当前房间列表(包括房间号和房间名称) 选择房间进入 多个用户在线群聊 可以发送表情(用本地的,实际上发送只发送表情的代码) 退出房间 选择创建房间 房间里没人(房主退出),导致房间解散 显示系统

  • Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解

    本文实例讲述了Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法.分享给大家供大家参考,具体如下: 相关内容: tkinter的使用 1.模块的导入 2.使用 3.控件介绍 Tk Button Label Frame Toplevel Menu Menubutton Canvas Entry Message Text Listbox Checkbutton Radiobutton Scale Scrollbar 首发时间:2018-03-04 16:39 Python的GU

  • java必学必会之GUI编程

    一.事件监听 测试代码一: package cn.javastudy.summary; import java.awt.*; import java.awt.event.*; public class TestTextField { public static void main(String args[]) { new MyFrameTextField(); } } class MyFrameTextField extends Frame { MyFrameTextField() { Text

  • Python Tkinter GUI编程入门介绍

    一.Tkinter介绍 Tkinter是一个python模块,是一个调用Tcl/Tk的接口,它是一个跨平台的脚本图形界面接口.Tkinter不是唯一的python图形编程接口,但是是其中比较流行的一个.最大的特点是跨平台,缺点是性能不太好,执行速度慢. 一般使用Tkinter的方法是: From Tkinter import * 或者: import Tkinter 两者的区别我们前面讲模块的时候已经说过了.   二.Tkinter的使用 先看一下GUI程序的开发,熟悉MFC的朋友应该不会陌生.

随机推荐