我使用的自定义按钮包含其他元素和颜色样式,如TopColor和BotColor。我需要在面板中使用其他面板来处理这个Button。
我正在尝试这个:
foreach(CustomButton btn in panel1.Controls)
{
if(btn is CustomButton)
{
btn.TopColor=Color.Red;
}
内部面板1我也包含其他面板。而我得到的错误是 它不能成为按钮中的转换元素面板。
一种解决方案是在一个面板中分离按钮。但我想问一下是否有办法避免其他因素。我不想使用foreach(在this.Controls中控制a)的原因是它不能识别我的自定义颜色样式TopColor和BotColor
答案 0 :(得分:1)
您收到错误的原因是您尝试将所有控件投射到CustomButton,甚至是面板。您已经知道了自己要查找的类型,因此您不必遍历面板中的每个控件。
假设您的所有自定义按钮都在panel1中并且您不需要递归,则应该将项目过滤到您想要的类型,然后使用它们:
var customButtons = panel1.Controls.OfType<CustomButton>();
foreach (CustomButton customButton in customButtons)
{
//do what you need here
}
答案 1 :(得分:1)
我希望这个解决方案适合你。
private void SetStylesToCustomButtons(Control.ControlCollection controls)
{
foreach (Control control in controls)
{
if (control is CustomButton)
{
(control as CustomButton).TopColor = Color.Red;
}
else if (control is Panel)
{
SetStylesToCustomButtons((control as Panel).Controls);
}
}
}
答案 2 :(得分:0)
遍历所有控件(作为控件),检查它是否为按钮,然后在尝试设置颜色之前将其强制转换。
foreach(Control c in panel1.Controls)
{
if (c is CustomButton)
{
(c as CustomButton).TopColor = Color.Red;
}
}