Что используется для ключа в System.Windows.Forms.Control.ControlCollection? - PullRequest
4 голосов
/ 03 января 2012

Итак, System.Windows.Forms.Control имеет свойство Controls типа Control.ControlCollection.У меня есть элемент управления в форме, в которой есть несколько небольших элементов управления.Эти субэлементы имеют метку и текстовый идентификатор, который является именем поля из базы данных.

Мне нужно вернуться в коллекцию Controls и найти элементы управления по имени.ControlCollection имеет public virtual Control this[string key] { get; } и public virtual bool ContainsKey(string key), так что, похоже, я должен их найти.

Однако функция Add (public virtual void Add(Control value)) не принимает строку ключапросто System.Windows.Forms.Control, который вы добавляете, и все мои вызовы ContainsKey возвращают ложь.

При вычислении чего-либо на Control необходимо переопределить, чтобы он был ключом (поскольку только Control пропущено), я попытался переопределить ToString(), чтобы вернуть имя поля базы данных (которое я хочу использовать для поиска), но ContainsKey по-прежнему возвращает false, когда я знаю, что элемент управления для указанного поля присутствует.

В документации для this[string key] { get; } сказано, что ключевым параметром является «Имя элемента управления, который нужно извлечь из коллекции элементов управления».У Control нет свойства Name, которое я могу переопределить, его единственное свойство Name содержит имя класса, которое будет одинаковым для каждого добавляемого элемента управления.В документации для ContainsKey(string key) сказано, что ключевым параметром является «Ключ для определения местоположения», что еще менее полезно.

Найден ответ, но я уже все это написал, так что я мог бы опубликовать его, а затемответь самому себе, если кому-то это может пригодиться ...

1 Ответ

7 голосов
/ 03 января 2012

Хотя я не могу переопределить свойство Name, оно {get; set;}, но не чисто {get;}, как я тупо предположил. Поэтому, если я установлю Name моего элемента управления на имя поля базы данных, прежде чем добавить его в коллекцию Controls, я смогу найти его, как и ожидалось.

Ответ был в сводной документации по методу Control[] Find(string key, bool searchAllChildren), а не в документации по функциям, которые я собирался использовать: "Ищет элементы управления по их свойству System.Windows.Forms.Control.Name и создает массив всех соответствующих элементов управления."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...