模拟winform里的控件的事件和委托机制

下面的代码是我模块winform的事件机制,一看就懂。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary.事件
{
    class 模拟控件事件机制
    {

    }

    public class Form1
    {
        MyButton button1;
        public Form1()
        {
            FormIni();
            button1.Text = "111";
        }
        public void FormIni()
        {
            this.button1 = new MyButton("button1");///
            button1.TextChanged += new MyButton.MyButtonTextChangedHandler(Button1OnTextChanged) ;
        }

        void Button1OnTextChanged(object send, MyButtonEventArgs e)
        {
            Console.WriteLine("button1的Text属性改变后调用,MyButtonEventArgs的message信息为:"+e.Message);
        }

    }

    /// <summary>
    /// 定义Button
    /// </summary>
    class MyButton
    {
        /// <summary>
        /// 按钮的Text
        /// </summary>
        private string text;
        public string Text
        {
            get { return text; }
            set { text = value; OnTextChanged(new MyButtonEventArgs(name)); }
        }
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public MyButton(string name)
        {
            Name = name;
        }

        ///定义事件的委托
        public delegate void MyButtonTextChangedHandler(object sender, MyButtonEventArgs e);

        ///定义事件
        public event MyButtonTextChangedHandler TextChanged;
        ///定义引发事件的方法OnTextChanged()
        private void OnTextChanged(MyButtonEventArgs e)
        {
            e.Message = name;
            Console.WriteLine("MyButton的Text属性改变,MyButton控件的事件TextChanged发生了,转入信息:"+e.Message);
            TextChanged(this, e);///如果没有这一行,MyButton的Text改变后引起的其它操作就不能运行
        }

    }

    /// <summary>
    /// 自定义事件参数
    /// </summary>
    class MyButtonEventArgs
    {
        private string message;///

        public string Message
        {
            get { return message; }
            set { message = value; }
        }

        public MyButtonEventArgs(string message)
        {
            this.message = message;
        }

    }

}

时间: 2024-08-29 02:09:29

模拟winform里的控件的事件和委托机制的相关文章

[WinForm]移除控件某个事件

关键代码: /// <summary> /// 移除控件某个事件 /// </summary> /// <param name="control">控件</param> /// <param name="eventName">需要移除的控件名称eg:EventClick</param> public static void RemoveControlEvent(this Control cont

WinForm动态添加控件及其事件(转)

出处:http://blog.sina.com.cn/s/blog_60d576800100tf61.html 1        private void PhotoForm_Load(object sender, System.EventArgs e) 2        { 3            this.LoadPhoto(); 4        } 5        private void LoadPhoto() 6        { 7            int  i= 0; 

C# WinForm窗体及其控件自适应各种屏幕分辨率

C# WinForm窗体及其控件自适应各种屏幕分辨率 一.说明  我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比例变化即可.因为窗体上控件的位置和大小是相对于自己所在的窗体的,也就是所谓的窗口坐标.  在这里我们只考虑相对于自己窗体的窗口坐标更简单,也就是成比例变化.为了多个窗体共用,我在这里创建一个类AutoSizeFormClass ,1.使用它去记录窗

关于UITableView选中效果以及自定义cell上的控件响应事件

tableView默认的点击效果是:点击cell:A,出现点击效果,点另一个cell:B的时候,A的点击效果才会消失. 1.对于tableView,比较常用的效果,是点击表格行,出现效果,点击完毕,效果消失 那么就要在代码里做一些设置.代码如下: -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath

jQuery-UI实现折叠面板里的控件拖曳

因一个项目的需要,需要在前端界面实现在折叠面板里拖曳控件到工作区的功能(类似于Android和MFC的可视化界面开发),于是就开始学起了强大的jQuery,发现里面的jQuery-UI有折叠面板.按钮等控件,但当在折叠面板里拖曳按钮时,按钮的拖曳范围只能是折叠面板内部,不能拖到工作区.所以这里绕了个弯实现了一下: 主要的实现过程是:首先在控件表明生成一个副本,每次拖曳控件的时候拖曳的都是副本,当拖曳完成,即鼠标弹起后,原控件表面就又生成一个副本待下次拖曳.(其他一些细节写在了注释里.) 代码:

纯js模拟 radio和checkbox控件

代码待优化,功能实现了,不兼容ie8以上, 相同name的radio可以实现切换的操作, 分享代码,共同学习进步 <!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <style> .radiobox, .checkbox { width: 10px; height: 10px; padding: 2px; borde

WinForm 清空界面控件值的小技巧

原文:WinForm 清空界面控件值的小技巧 在WinForm里面有时候需要清空自己输入内容或是选择的选项,以便重新操作流程,那么一般你是怎么清空界面各个控件值的呢?如果窗体里面控件,尤其是TextBox控件比较多的时候,代码里面是不是要设置每个控件的Text属性值为空呢?下面我用这个例子,来探讨下清空界面控件值的小技巧.而且还能复用.不必每个窗体都做这些枯燥.无聊的工作. 一般的做法是在清除控件的事件里面添加下面这样的代码: 代码 private void btnClear_Click(obj

WinForm之中BindingNavigator控件的使用

WinForm之中BindingNavigator控件的使用在微软WinForm中,BindingNavigator控件主要用来绑定数据.可以将一个数据集合与该控件绑定,以进行数据 联动的显示效果.如图下图所示: 那么,下面我们就来用BindingNavigator控件做一下上图所示的效果.分析:该案例以BindingNavigator控件为主线,我们定义一个实体类,将实体类以集合的形式显示在DataGridView中, 同时,将BindingNavigator与DataGridView绑定,将

WinForm界面布局控件WeifenLuo.WinFormsUI.Docking&quot;的使用 (二)

WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (二) 编写人:CC阿爸 2015-1-29 今天我想与大家继续一起分享这一伟大的控件.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 1.    DockPanel的一点点改进: 在浏览网上的一些技术文章发现,的确有些地方还是可以进一步改进,如当双击Tab时,原先是直接把当前Tab所表示的这个窗体,从主窗体的框架上分离现来,成为一个浮动的窗体.这不是我们想要的,有些同学修改源代码,把它改成了双击关