6 Stimmen

Was wird als Schlüssel in einer System.Windows.Forms.Control.ControlCollection verwendet?

Also hat ein System.Windows.Forms.Control eine Controls-Eigenschaft vom Typ Control.ControlCollection. Ich habe eine Steuerung auf einem Formular, die eine Vielzahl kleiner Untersteuerungen in dieser Sammlung hat. Diese Untersteuerungen haben ein Label und einen Textbezeichner, der der Feldname aus einer Datenbank ist.

Ich muss in der Lage sein, zurück in die Controls-Sammlung zu gehen und die Steuerungen nach Namen zu finden. Die ControlCollection hat einen public virtual Control this[string key] { get; } und einen public virtual bool ContainsKey(string key), also scheint es, als ob ich sie suchen könnte.

Die Add-Funktion (public virtual void Add(Control value)) akzeptiert jedoch keinen Schlüssel-String, sondern nur die System.Windows.Forms.Control, die Sie hinzufügen, und alle meine Aufrufe von ContainsKey geben false zurück.

Da ich dachte, dass etwas am Control überschrieben werden muss, um der Schlüssel zu sein (da nur das Control übergeben wird), habe ich versucht, ToString() zu überschreiben, um den Datenbankfeldnamen zurückzugeben (den ich für die Suche verwenden möchte), aber ContainsKey gibt immer noch false zurück, obwohl ich weiß, dass eine Steuerung für das angegebene Feld vorhanden ist.

Die Dokumentation für this[string key] { get; } besagt, dass der Schlüsselparameter "Der Name der Steuerung ist, der aus der Steuerungssammlung abgerufen werden soll." Das Control hat keine Name-Eigenschaft, die ich überschreiben kann, seine einzige Name-Eigenschaft enthält den Klassennamen, der für jede hinzugefügte Steuerung gleich sein wird. Die Dokumentation für ContainsKey(string key) besagt, dass der Schlüsselparameter "Der zu lokalisierende Schlüssel" ist, was noch weniger hilfreich ist.

Ich habe die Antwort gefunden, aber ich habe bereits all dies geschrieben, also könnte ich es genauso gut veröffentlichen und dann selbst beantworten, falls es für jemand anderen nützlich sein könnte...

10voto

Chuck Wilbur Punkte 2420

Obwohl ich die Name-Eigenschaft nicht überschreiben kann, ist es {get;set;} und nicht nur {get;}, wie ich dumm angenommen habe. Also, wenn ich den Name meines Steuerelements auf den Datenbankfeldnamen setze, bevor ich es zur Controls-Sammlung hinzufüge, kann ich es wie erwartet nachschlagen.

Die Antwort befand sich in den Zusammenfassungsdokumenten der Methode Control[] Find(string key, bool searchAllChildren), nicht in den Dokumenten für die Funktionen, die ich verwenden wollte: "Sucht nach Steuerelementen anhand ihrer System.Windows.Forms.Control.Name-Eigenschaft und erstellt ein Array aller Steuerelemente, die übereinstimmen."

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X