标题:用委托设置Lable的颜色出了问题
只看楼主
motor666
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2014-9-8
结帖率:37.5%
已结贴  问题点数:20 回复次数:2 
用委托设置Lable的颜色出了问题
我的项目里需要根据串口接收到的不同的数据来改变一个 Lable 的显示颜色,蓝色和绿色,于是做了一个下面的委托:
        delegate void SetLableCoLor(Label LB, Color Colorkind);
        public static void SetLableForeColor(Label LB, Color Colorkind)
        {
            if (LB.InvokeRequired)
            {
                SetLableCoLor SLC = SetLableForeColor;
                SLC.Invoke(LB, Colorkind);
            }
            else
            {
                if (Colorkind == Color.Blue)
                {
                    LB.ForeColor = Color.Blue;
                }
                else if (Colorkind == Color.Green)
                {
                    LB.ForeColor = Color.Green;
                }
             }
        }

      做一个按钮进行测试:
private void button1_Click(object sender, EventArgs e)
{
   SetLableString SLS = new SetLableString(LableDisplyString);
   SLS.Invoke(label1, "设置标签颜色为蓝色");
   SetLableCoLor SETCL = new SetLableCoLor(SetLableForeColor);
   SETCL.Invoke(label1,Color.Blue);

}

结果正确,可以改变颜色,但是,把这段程序放到串口接收到数据时,改变标签颜色就出错。显示:
"System.StackOverflowException"类型的未处理异常,在 System.Windows.Forms.dll 中发生

搜索更多相关主题的帖子: public 项目 
2017-04-17 14:15
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:20 
这个是自己调自己的无限循环
如果SetLableForeColor是通过外面Invoke方式调用,也就是说SetLableForeColor方法本身就是通过委托来执行的,里面就不需要再判断和调用了。
public static void SetLableForeColor(Label LB, Color Colorkind)
{
    if (Colorkind == Color.Blue)
    {
        LB.ForeColor = Color.Blue;
    }
    else if (Colorkind == Color.Green)
    {
        LB.ForeColor = Color.Green;
    }
}
2017-04-17 21:15
motor666
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2014-9-8
得分:0 
多谢了。
2017-04-18 11:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-476192-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.682949 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved