2017-07-08 68 views
-1

我在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)' is a 'method', which is not valid in the given context

什麼是我的錯?我的參考here錯過了()。這是一個公認的答案!我參考時有不同的情況嗎?或者它只是一個錯字?

+0

你有多少個按鈕?如果它是10或20,你可以創建一個數組來保存對按鈕變量的引用,而不是寫遞歸?對於例如'var buttons = new Button [] {button1,button2,button3}'或者你是否添加按鈕來動態形成? – shahkalpesh

+0

@shahkalpesh我有14個按鈕,並加載它們的形式非動態加載。 – GntS

+1

雖然你已經得到了答案,但我認爲可以將14個變量名添加到按鈕數組中,而不是試圖在運行時查找按鈕。 – shahkalpesh

回答

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
.OfType<Button> 

OfType是一種方法,因此您在結尾處缺少()。它應該是:

.OfType<Button>() 
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 
    } 
} 
+0

很有用的答案。謝謝。 – GntS

相關問題