C# 冲突标签前景
我最近开始学习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.
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
。