2017-07-08 15 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は汎用メソッドであり、メソッドとして使用する必要があります。 ただ、次のようにその行を置き換える:

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; 
} 

と、この方法でそれを使用します:

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

また、私は以下のような方法を書くためにあなたをお勧めします

var myBtns = GetAllButtons(yourForm); 
foreach (var btn in myBtns) 
{ 
    btn.FlatStyle = FlatStyle.Popup; 
} 
1
.OfType<Button> 

OfTypeは方法の1つで、()が最後に欠けています。それは次のようになります。Uは次のように呼び出す必要が

.OfType<Button>() 
1

:リンク以下OfType<Button>().ToList();

は、uは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

関連する問題