我在面板上添加了一个Panel和两个LinkLabel以及一个树视图。
现在在panel_Paint事件中,我希望linklabel颜色变为白色,树视图的背景颜色变为黑色。 我该怎么做?
以下代码仅在面板中没有树视图时才有效,但当我在面板中添加树视图时,它会说:
无法将“System.Windows.Forms.TreeView”类型的对象强制转换为“System.Windows.Forms.LinkLabel”。
foreach (LinkLabel link in panel1.Controls)
{
link.LinkColor = Color.White;
}
答案 0 :(得分:3)
您的面板包含所有控件 - 其中一个是TreeView
,无法转换为LinkLabel
。在循环中,您需要检查控件的类型,如下所示:
foreach (Control control in panel1.Controls)
{
if (control is LinkLabel)
{
... set link color
}
else if (control is TreeView)
{
... set background
}
}
或者,如果您只有一个LinkLabel
和一个TreeView
,则不需要循环 - 只需按名称访问它们,就像使用panel1
答案 1 :(得分:2)
试试这个:
foreach (Control ctrl in panel1.Controls)
{
LinkLabel link = ctrl as LinkLabel;
if(link != null)
link.LinkColor = Color.White;
}
答案 2 :(得分:2)
您收到错误是因为您尝试将panel1中的所有控件转换为LinkLabel。你需要尝试这样的事情
foreach (Control control in panel1.Controls)
{
if (control.GetType() == typeof(LinkLabel))
{
LinkLabel link = (LinkLabel)control;
link.LinkColor = Color.White;
}
}
希望这有帮助。
编辑:我知道有一种方法,但不确定100%的名称或语法。请参阅下面的改进答案。
foreach (LinkLabel link in panel1.Controls.OfType<LinkLabel>())
{
link.LinkColor = Color.White;
}
希望这对你更好。