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的引用错过了()
。这是一个公认的答案!我的参考资料是否有不同的情况?或者它只是一个错字?
答案 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
}
}