2009-03-09 3 views
2

Gibt es eine Möglichkeit, alle Kontrolle mit Linq abrufen.Linq Fetch alle Steuerelemente (geordert)

Was ich mag, ist, so etwas zu tun (um die Steuerung durch Registerindex):

foreach (Control control in this.Controls.OrderBy(c => c.TabIndex) 
{ 
    ... 
} 

ich diese Art von Abfrage verwenden, wenn ich bekam eine Liste < ...>

Ich verwende C# und .Net 3.5

Antwort

4

ControlCollection implementiert nur IEnumerable, nicht IEnumerable<T>. Das ist einfach, obwohl zu beheben - fügen Sie einen Aufruf an Cast():

foreach (Control control in Controls.Cast<Control>() 
            .OrderBy(c => c.TabIndex)) 
{ 
} 

Oder Sie könnten einen Abfrageausdruck verwendet werden, die Cast() bei Bedarf nennen:

var controls = from Control c in Controls 
       orderby c.TabIndex 
       select c; 

foreach (Control control in controls) 
{ 
} 
+0

Hinweis: TabIndex auf WebControl ist, so ersetzen alle "Kontrolle" mit "WebControl". –

+0

TabIndex ist auch auf WinControl. Danke für die schnelle Antwort! – Melursus

+0

Ups, verbringen Sie Ihre Zeit in einer Welt und vergessen Sie die anderen existieren :) –

Verwandte Themen