2016-05-11 12 views
1

Ich habe eine Reihe von Steuerelementen erstellt, die von Basissteuerelementen abgeleitet sind. Im Rahmen dieser erweiterten Kontrollen habe ich eine Reihe von Eigenschaften hinzugefügt. Eine dieser Eigenschaften ist eine eindeutige ID, die mir hilft, sie an einen Datenbankwert zu binden.C# - Suchen Sie ein Steuerelement nach einer der Eigenschaften

Ich muss nach diesem Steuerelement von UniqueID suchen können, eine Eigenschaft, die nur meine abgeleiteten Steuerelemente haben (beachten Sie, dass alle Steuerelemente im Formular meine abgeleiteten Steuerelemente sind, und alle von ihnen haben UniqueID als eine Eigenschaft). Es fällt mir eine Reflexion ein, aber ich kann kein Beispiel finden.

Antwort

2

Verwenden Enumerable.OfType<T> zu Kontrollen Ihrer spezifischen Art herauszufiltern und dann können Sie abfragen, gegen die spezifische Eigenschaft, so etwas wie:

var controls = this.Controls.OfType<YourControl>().Where(r => r.UniqueId == someValue); 

Denken Sie daran, diese sucht nur die Steuerelemente auf Root-Ebene, wenn Sie daran interessiert sind bei der Suche nach geschachtelte Steuerelemente müssen Sie dann einen rekursiven Ansatz verwenden. Siehe: How to get ALL child controls of a Windows Forms form of a specific type (Button/Textbox)?

+0

Gute Antwort. Wie unterscheidet es sich, wenn jede der Kontrollen unterschiedlich ist? Zum Beispiel, wenn ich eine MyTextBox: TextBox und MyComboBox: ComboBox habe. Müsste ich Controls.OfType () verwenden? –

+0

Sicher können Sie die Basisklasse in diesem Fall verwenden, aber wenn Sie 'Control' Basisklasse verwenden, dann ist es nicht auf die Klassen beschränkt, die Sie oben angegeben haben, es wird auch andere Steuerklassen enthalten, wie Button usw. – Habib

+1

Das ist eigentlich OK. Die einzigen Steuerelemente dort sind diejenigen, die ich erstellt habe, die alle die Eigenschaft enthalten. Vielen Dank für Ihre Hilfe :) –

Verwandte Themen