无法将'System.Windows.Forms.FlowLayoutPanel'类型的对象强制转换为'System.Windows.Forms.Button c#

时间:2016-11-09 14:39:59

标签: c# winforms controls

我有一个应用程序,里面有很多按钮,以便区分它们,我创建了一个类,我把它放在: 我不得不说我的按钮位于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

谢谢。

1 个答案:

答案 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>())