委托(一个主窗体统计多个从窗体的按钮单击的次数)

  1. 云栖社区>
  2. 博客>
  3. 正文

委托(一个主窗体统计多个从窗体的按钮单击的次数)

liminjun88 2016-04-21 10:35:33 浏览957

  最近在学习金老师的《.NET2.0面向对象编程揭秘》,学到了13章,委托、事件驱动和异步调用。书上有个试一试,要求:利用委托,达到一个主窗体统计多个从窗体的按钮单击的次数。

效果如下:


frmMain

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DelegateInForm
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();     
        }
        private void ShowCount(string count)
        {
            lblCount.Text = count;
        }

        private void btnClick_Click(object sender, EventArgs e)
        {
            //创建从窗体对象并显示
            frmOther frm = new frmOther();
            frm.recorder = this.ShowCount;//向从窗体的委托变量赋值
            frm.Show();
        }
    }
}


frmOther

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DelegateInForm
{
    public partial class frmOther : Form
    {
        //定义了一个委托类型ShowInfo
        public delegate void ShowInfo(string info);

        public frmOther()
        {
            InitializeComponent();
        }
        //委托变量recorder
        public ShowInfo recorder;
        private static int counter = 0;//计数器,使用static可以多个从窗体点击计数
        private void btnClickME_Click(object sender, EventArgs e)
        {
            counter++;
            if (recorder != null)
            {
                recorder(counter.ToString());
            }
        }
    }
}
之后,我想进一步修改,在一个主窗体上单击按钮,多个从窗体同时显示单击的次数。只是对上面的代码修改了一下,在从窗体初始化后,向主窗体的委托变量赋值时,出现了错误。请大家指教,谢谢。