2016-05-11 31 views
2

groupBoxコントロールをループしてコントロールの名前を取得するコードがあります。次に、名前をテキストボックスに書き込みます。しかし、それらがループしている順番は、名前gb1、gb2、gb3と一致する必要があります。これらのループの順番は、作成された順番になります)。私は、デザイナーのコードを整理して、コントロールの作成を私が望むやり方で指示していますが、違いはありません。すべてのポインタ?ありがとうgroupBoxコントロールを適切な順序でループする

private void loopThroughControls() 
    { 
     foreach (Control ctrl in this.Controls) 
      {     
      if (ctrl.ToString().StartsWith("System.Windows.Forms.GroupBox")) 
      { 
       txtEntry.Text += (ctrl.Text + System.Environment.NewLine); 
      } 
      } 
    } 
+0

タブのインデックス番号を変更すると注文が変わるのですか? – binaryBigInt

+0

いいえ、タブの順序は正しく設定されています。 –

答えて

0

トーマス答えに展開するには:

private void LoopThroughControls() 
    { 
    foreach (var ctrl in this.Controls.OfType<GroupBox>().OrderBy(c => c.Name)) 
    { 
     txtEntry.Text += (ctrl.Text + System.Environment.NewLine); 
    } 
    } 

これはControlsコレクションからGroupBoxインスタンスを取得します、それは彼らの名前によってそれらをソートし、あなたが望んでいたように、それはテキストの内容を取得します。

+0

素晴らしい、これはLINQの例だと思いますか? (私はアマチュア開発者btwとして完全に無知です) –

+0

はい、それは例です。私はWinForms 2.0環境(ただし今は4.6 WPFの環境)から来ていることはかなり新しくなっていますが、非常に速くそれを取り上げます。 Stack Overflowの上にネストされたLINQのいくつかの狂った楽しい例があります。私はあなたの開発の旅の中でそれらを見つけることができると確信しています。 :-) –

0

リストを反復する前に並べ替えるのはなぜですか?

foreach (var ctrl in this.Controls.OrderBy(c => c.Name)) 
{ 
    // ... 
} 
+0

ありがとう、私はすることができます。しかし、コントロールがどのように処理されるかについて何かを学びたいと思っています。 –

+1

コントロールは作成時に 'Controls'リストに追加され、そのリストは後で並べ替えられません。あなたが特定の順序でそれらをしたい場合は、あなた自身でそれらを並べ替える必要があります。フレームワークは、実際にはリストを検索する名前で直接コントロールを参照します(ただし、実際の実装はおそらくハッシュルックアップです...)。 –

+0

おかげで、ありがとう –

関連する問題