none
大量控件类似事件能否批量添加,如何快速实现或者如何判断要执行的是哪个控件 RRS feed

  • 问题

  • 一个界面大概有一个flowLayoutPanel,其中flowLayoutPanel中放了大概50个Label控件,每个空间都要执行以下代码:

    private void Label1_MouseEnter(object sender, EventArgs e)
    {
        Label1.BackColor = Color.Blue;
    }
    
    private void Label1_MouseLeave(object sender, EventArgs e)
    {
        Label1.BackColor = Color.Transparent;
    }
    如果50个Label一一添加以上两个事件,显得非常麻烦,代码也很长,请教大师们,有没有什么办法可以较为简单实现?比如说鼠标移入flowLayoutPanel,然后判断鼠标移入的是哪个label,然后执行这个Label的BackColor为Blue;移出flowLayoutPanel则时所有BackColor为Transparent。请高手赐教,谢谢!


    努力~



    • 已编辑 zjyh16 2013年5月27日 9:08
    2013年5月27日 9:07

答案

  • Hi,

    Try this,

    private void Form1_Load(object sender, EventArgs e)
    {
    	foreach (var labelItem in flowLayoutPanel1.Controls.OfType<Label>())
    	{
    		labelItem.MouseEnter += Label1_MouseEnter;
    		labelItem.MouseLeave += Label1_MouseLeave;
    	}
    }
    
    private void Label1_MouseEnter(object sender, EventArgs e)
    {
    	var labelItem = sender as Label;
    	if(labelItem !=null)
    		labelItem.BackColor = Color.Blue;
    }
    
    private void Label1_MouseLeave(object sender, EventArgs e)
    {
    	var labelItem = sender as Label;
    	if (labelItem != null)
    		labelItem.BackColor = Color.Transparent;
    }

     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已编辑 亂馬客 2013年5月27日 9:26 modify code
    • 已标记为答案 zjyh16 2013年5月27日 11:11
    2013年5月27日 9:23

全部回复

  • Hi,

    Try this,

    private void Form1_Load(object sender, EventArgs e)
    {
    	foreach (var labelItem in flowLayoutPanel1.Controls.OfType<Label>())
    	{
    		labelItem.MouseEnter += Label1_MouseEnter;
    		labelItem.MouseLeave += Label1_MouseLeave;
    	}
    }
    
    private void Label1_MouseEnter(object sender, EventArgs e)
    {
    	var labelItem = sender as Label;
    	if(labelItem !=null)
    		labelItem.BackColor = Color.Blue;
    }
    
    private void Label1_MouseLeave(object sender, EventArgs e)
    {
    	var labelItem = sender as Label;
    	if (labelItem != null)
    		labelItem.BackColor = Color.Transparent;
    }

     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已编辑 亂馬客 2013年5月27日 9:26 modify code
    • 已标记为答案 zjyh16 2013年5月27日 11:11
    2013年5月27日 9:23
  • Hi,

    Try this,

    private void Form1_Load(object sender, EventArgs e)
    {
    	foreach (var labelItem in flowLayoutPanel1.Controls.OfType<Label>())
    	{
    		labelItem.MouseEnter += Label1_MouseEnter;
    		labelItem.MouseLeave += Label1_MouseLeave;
    	}
    }
    
    private void Label1_MouseEnter(object sender, EventArgs e)
    {
    	var labelItem = sender as Label;
    	if(labelItem !=null)
    		labelItem.BackColor = Color.Blue;
    }
    
    private void Label1_MouseLeave(object sender, EventArgs e)
    {
    	var labelItem = sender as Label;
    	if (labelItem != null)
    		labelItem.BackColor = Color.Transparent;
    }

     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    非常感謝亂馬客大師!很好的答案,幫了大忙了。我經常看你的blog,都寫得很好,都是我學習的材料。再次感謝!

    努力~

    2013年5月27日 11:14
  • Hi zjyh16,

        請別客氣,請多多上來論壇跟大伙一起討論,^_^!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年5月28日 1:40