Entwickler-Ecke

WinForms - Elemente eines bestimmten typs aus Panel auslesen


C# - Do 01.12.11 21:26
Titel: Elemente eines bestimmten typs aus Panel auslesen
Hey Forum,

habe endlich mal wieder Zeit gefunden zu proggen. Und schon habe ich wieder eine Frage:
Ich habe ein Panel. Darum befinden sich wiederum andere Panels, aber auch andere Objekte. Wie kann ich nun (z.B.) in einer foreach Schleife herausfinden, ob das Objekt ein Panel ist. Meine Ansätze:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
try
            {
                foreach (Panel elements in MainPanel.Controls)
                    elements.Location = new Point(elements.Location.X - (e.NewValue - e.OldValue), elements.Location.Y);
            }
            catch (InvalidCastException) { } //Das ist die Exception die auslöst, wenn das Objekt nicht konvertierbar ist
            catch (Exception ex) { MessageBox.Show(ex.Message, "ERROR"); return; }

Das hier geht doch bestimmt auch ohne try-Block.
Ich habs auch schon mit element.GetType() == Panel probiert aber das schluckt der Compiler nicht.

Hat jemand eine Idee?

EDIT:
Habs grad geschafft xD. Mit foreach Control element in MainPanel.Controls.Cast<Control>().OfType<Panel>()


Ralf Jansen - Do 01.12.11 21:57

Den Cast von Control nach Control ist überflüssig. Nur OfType<Panel>() reicht.


C# - Do 01.12.11 22:01

Hoppla stimmt ja xD. Ich benutze bei Linq meistens die Where()-Methode und da brauche ich in vielen Fällen das Cast<>() davor.