日期:2014-05-17  浏览次数:20930 次

请教如何实现让多个控件共享一个事件?
本帖最后由 gladiatorxp 于 2013-01-23 22:00:49 编辑
最近在改一个别人写的程序,一个屏幕上面有若干个panel,panel上面有整齐排着的几列label,我发现原来的程序之定义了每一列第一行的那个label对应的一个click事件,但是跑起来整列的label都能响应这个click事件,我问了些程序的人,但是他比较忙只说了大概什么授权之类的做法,不知道哪位能详细说明一下?谢谢!!
label 控件

------解决方案--------------------
labe11.Click += commonclickhandler;
labe12.Click += commonclickhandler;
labe13.Click += commonclickhandler;
labe14.Click += commonclickhandler;

...

void commonclickhandler(object sender, EventAggs e)
{
    ...
}
------解决方案--------------------
   public Form1()
        {
            InitializeComponent();

            this.label1.Click += label_Click;
            this.label2.Click +=label_Click;
        }

        private void label_Click(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }
------解决方案--------------------
可以的,通过代码后绑定label的click事件
  private void Form2_Load(object sender, EventArgs e)
        {
            foreach (Control c in panel1.Controls)
            {
                if (c is Label) //判断是不是Label控件
                {
                    c.Click += label_Click; //动态绑定Label的Click事件
                }
            }
        }

        /// <summary>
        /// 所有label的click事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void label_Click(object sender, EventArgs e)
        {
            
        }

------解决方案--------------------
  public Form1()
        {
            InitializeComponent();