Не удается найти новое свойство подкласса в элементе управления winforms - PullRequest
2 голосов
/ 16 декабря 2011

Благодаря помощи здесь мне удалось рекурсивно перебрать все элементы управления на моей winform и найти свой подклассифицированный элемент управления, но когда я пытаюсь обновить свои пользовательские свойства _key и _value, объект ctrl не открывает их :( я использую Ниже ctrlContainer - форма вызова, переданная как

foreach (Control ctrl in ctrlContainer.Controls)
{
    // code to find my specific sub classed textBox
    // found my control
    // now update my new property _key
    ctrl._key does not exist :(

    I know the ctrl exists and is valid because ctrl.Text = "I've just added this text" works.
    _key is visible when looking at the control in the form designer.
}

Может кто-нибудь подсказать мне, что я делаю не так? Спасибо.

Ответы [ 2 ]

4 голосов
/ 16 декабря 2011

_key не существует, потому что вы смотрите на Control.

попробуйте сделать:

foreach (var ctrl in ctrlContainer.Controls.OfType<MyControl>())
{
     ctrl._key = "somthing";
}
3 голосов
/ 16 декабря 2011

Это потому, что ваша ссылка относится к типу Control (foreach (Control ctrl), который, как я полагаю, не является вашим субклассовым контролем.Эта ссылка будет понимать только те члены, которые принадлежат ей, _key предположительно принадлежит производному классу.Попробуйте это:

foreach (Control ctrl in ctrlContainer.Controls)
{
    // code to find my specific sub classed textBox
    // found my control
    // now update my new property _key
    if (ctrl is MyControl)
    {
        MyControl myControl = (MyControl)ctrl;
        myControl._key = "";
    }
}

Или вы можете изменить свой итератор, чтобы найти только экземпляры вашего контроля, как это предложил Себастьян.Это был бы более чистый код.

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