如何更改窗口中所有按钮的属性?

时间:2017-07-08 06:01:27

标签: c# winforms button visual-studio-2013

Form1上有一些按钮。我想将FlatStyle属性设置为FlatStyle.Popup。 我搜索并编写了一些代码如下:

// List<Control> ButtonsList = new List<Control>();
 List<Button> ButtonsList = new List<Button>();
 public Form1()
        {
            InitializeComponent();
            this.Icon = Properties.Resources.autorun;  //Project->Properties->Resources->
            ButtonsList = GetAccessToAllButtons(this).OfType<Button>.ToList(); //*** hot line ***

            foreach(Button btn in ButtonList)
            {
                btn.FlatStyle = FlatStyle.Popup;
            }

        }



 public IEnumerable<Control> GetAccessToAllButtons(Control thisClass)
        {
            List<Control> ControlsList = new List<Control>();
            foreach (Control child in thisClass.Controls)
            {
                ControlsList.AddRange(GetAccessToAllButtons(child));
            }
            ControlsList.Add(thisClass);
            return ControlsList;
        }

但是当我在代码的热线中使用GetAccessToAllButtons()时,VS会生成此错误:

  

'System.Linq.Queryable.OfType(Query.Linq.IQueryable)'是一个   'method',在给定的上下文中无效

我的错误是什么?

修改:我在here的引用错过了()。这是一个公认的答案!我的参考资料是否有不同的情况?或者它只是一个错字?

3 个答案:

答案 0 :(得分:1)

OfType是通用方法,您必须将其用作方法。 只需将该行替换为以下内容:

ButtonsList = GetAccessToAllButtons(this).OfType<Button>().ToList();

另外,我建议您编写如下方法:

public List<Button> GetAllButtons(Form f)
{
    List<Button> resultList = new List<Button>();
    foreach(Control a in f.Controls)
    {
        if(a is Button)
        {
            resultList.Add((Button)a);
        }
    }
    return resultList;
}

并以这种方式使用它:

var myBtns = GetAllButtons(yourForm);
foreach (var btn in myBtns)
{
    btn.FlatStyle = FlatStyle.Popup;
}

答案 1 :(得分:1)

.OfType<Button>

OfType是一种方法,因此您在最后会遗漏()。它应该是:

.OfType<Button>()

答案 2 :(得分:1)

你需要像这样打电话:OfType<Button>().ToList();

以下链接将帮助您了解OfType方法:

https://msdn.microsoft.com/en-us/library/bb360913(v=vs.110).aspx

最好以这种方式使用:

foreach (var control in this.Controls)
{
   if (control.GetType()== typeof(Button))
   {
       //do stuff with control in form
   }
}