首页 > 代码库 > C# 命令绑定

C# 命令绑定

在构建WinForm程序中,为了使系统的结构清晰,有好的用户交互体验,实现不同按钮之间的交互,不使主窗体里面的代码臃肿。将按钮的命令通过类进行绑定,实现命令的管理使很有必要的。

该文章是将如何实现Button的按钮事件绑定的。

1、新建WinForm程序

技术分享

2、添加3个Button按钮,如下图所示

技术分享

3、新建ICommand.cs接口,代码如下

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace commandTest{    //命令接口    public  interface ICommand    {        void OnClick();        void New();        void Refresh();    }}

4、新建命令管理类CommandUnitily.cs,代码如下

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace commandTest{    class CommandUnitily    {        //创建命令集合        private static List<ICommand> cmds = new List<ICommand>();        //将命令添加到集合里面        public static void  CmdRegist(ICommand cmd)        {               cmds.Add(cmd);        }        //刷新所有命令,用于命令直接的相互影响        public static void AllRefresh()        {            foreach (ICommand cmd in cmds)            {                cmd.Refresh();            }        }    }}

5、新建Button按钮通用类ButtonTool.cs,代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;namespace commandTest{     //button控件公用类,继承自ICommand接口     class ButtonTool : ICommand          {        private Button bt;        void bt_Click(object sender, EventArgs e)        {            OnClick();            CommandUnitily.AllRefresh();//所有按钮都刷新,包括按钮本身        }        //使用virtual关键词之后,调用OnClick方法之后,         //会调用派生类(举例:Button1Click)中的OnClick,         //从而实现各自的button点击事件        public virtual void OnClick()        {           Console.WriteLine("点击button事件");        }        public void New(Button but)        {            bt = but;            bt.Click += new EventHandler(bt_Click);        }        public void Refresh()        {            Console.WriteLine(bt.Name+"刷新");        }        public void New()        {            throw new NotImplementedException();        }    }}

6、创建Button1Click.cs点击类,代码如下

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;namespace commandTest{    //创建Button1事件执行类,继承自ButtonTool    class Button1Click : ButtonTool    {        public Button1Click(Button obj)        {            Console.WriteLine("button1注册成功");            this.New(obj);        }        //重写ButtonTool类的OnClick方法,用于实现Button1的点击事件        public override void OnClick()        {            base.OnClick();            Console.WriteLine("点击button1事件");        }    }       }

7、主窗体Form.cs代码如下

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace commandTest{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e)        {            CommandUnitily.CmdRegist(new Button1Click(button1));
  Console.WriteLine("窗体加载完毕"); } }}

8、文件结构如下:

技术分享

9、测试

从窗体加载到点击button1测试的结果如下图:

技术分享

可以借鉴Button1Click.cs类实现button2和button3的按钮点击事件

源代码:http://pan.baidu.com/s/1eSwoh5C

C# 命令绑定