我有一个应用程序,里面有很多按钮,以便区分它们,我创建了一个类,我把它放在: 我不得不说我的按钮位于FlowLayoutPanel中。
public static void SetButtonPos(Form f1,FlowLayoutPanel fk)
{
foreach (Button c in f1.Controls)
{
if(c.Name.Contains("BTN_Menu"))
{
c.Size= new Size(247, 45);
c.BackColor = ColorTranslator.FromHtml("#373737");
c.ForeColor = ColorTranslator.FromHtml("#FFFFFF");
c.FlatStyle = FlatStyle.Flat;
c.FlatAppearance.BorderSize = 0;
c.TextAlign = ContentAlignment.MiddleLeft;
c.TextImageRelation = TextImageRelation.ImageBeforeText;
c.Height = 45;
c.Width = fk.Width - 6;
}
}
}
但我在标题中收到了错误,你有什么想法吗?
无法将'System.Windows.Forms.FlowLayoutPanel'类型的对象强制转换为'System.Windows.Forms.Button
谢谢。
答案 0 :(得分:1)
此行不正确
foreach (Button c in f1.Controls)
这里你认为f1中的每个控件都是一个按钮,因此文本框和其他控件也会触发你的错误。相反,如果您只想按钮将代码更改为
foreach (Button c in f1.Controls.OfType<Button>())
请记住,这只会找到直接包含在表单的Controls集合中的Buttons。如果它们在另一个容器(如组框或面板)中,则上面的行将不起作用,您应该使用适当的容器或递归调用来遍历每个Controls集合
修改强>
如果您的按钮位于FlowLayoutPanel的控件集合内,则代码应搜索该集合中的按钮
foreach (Button c in fk.Controls.OfType<Button>())