Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 冲突标签前景_C#_Forms_Colors_Label - Fatal编程技术网

C# 冲突标签前景

C# 冲突标签前景,c#,forms,colors,label,C#,Forms,Colors,Label,我最近开始学习c#,我从制作一个简单的井字游戏开始,使用标签和表格 当我点击标签时,我希望它改变背景色和前景色 这是我的密码 public void LabelClick(Label lbl, int i) { if (strCurrPlayer == strPlayer1) { liP1Squares.Add(i); lbl.BackColor = System.Drawing.Color.

我最近开始学习c#,我从制作一个简单的井字游戏开始,使用标签和表格

当我点击标签时,我希望它改变背景色和前景色

这是我的密码

        public void LabelClick(Label lbl, int i)
    {
        if (strCurrPlayer == strPlayer1)
        {
            liP1Squares.Add(i);
            lbl.BackColor = System.Drawing.Color.Black;
            lbl.ForeColor = System.Drawing.Color.White;
            lbl.Text = "X";
        }
        else
        {
            //Player2
            liP2Squares.Add(i);
            lbl.BackColor = System.Drawing.Color.White;
            lbl.ForeColor = System.Drawing.Color.Black;
            lbl.Text = "O";
        }
        lbl.Enabled = false;
        SwapPlayer();
    }
但是,调用时,它会正确设置背景色,但前导词(即文本)会从红色(默认值)变为黑色(对于玩家1,而不是白色),而对于玩家2,则是浅灰色(而不是黑色)

我想知道当背景颜色改变时,标签或表单中是否有默认改变文本颜色的字段。如果不是的话,还有什么可以做出这种改变


任何帮助都将不胜感激。

删除
lbl.Enabled=false以查看更改


禁用控件后,它会将标签背景色设置为
SystemColors。控件
和前景色设置为
SystemColors。灰色文本

在标签上设置项目后,通过

lbl.Enabled = false;
这将导致标签使用Windows中的禁用主题

为了改变这种行为,您应该使用事件而不是直接方法

每个标签都提供一个
单击
-事件,单击标签后可以使用该事件调用方法。
然后,您可以从
标签中删除事件处理程序。单击
,您无需禁用它


请参阅以了解有关
控件的信息。单击
-EventHandler

您是否尝试过不禁用该字段,即省略
lbl.Enabled=false
?这是可行的,但我非常希望标签在单击后被禁用。还有其他功能可以实现同样的功能吗<例如,code>lbl.Clickable=false
请阅读我的答案以获得建议(这也是非常有用和常见的)。我已在构成3x3网格的所有标签上注册了单击、鼠标入和鼠标出事件。上面的方法在单击时被调用。有没有办法从选定的UI元素中整齐地删除所有事件处理程序?我环顾四周,所有的方法似乎都有点笨拙。好的,那么你只需要在点击后取下事件处理程序。尽管如此,您还是应该尝试保持“Microsoft”使用事件的方式,方法是(如有必要)创建
委托
,并使用
EventHandler(objectsender,EventArgs e)
-概念。本教程有点旧,但对方法的描述很好。是的,通过说
EventXYZ=null
您将从列表中删除所有附加的调用程序,这仅对您创建的事件有效,对于
控件的事件,您必须坚持使用
Control.Event-=EventHandler