Доступ к компоненту в унаследованной форме из базовой формы - PullRequest
1 голос
/ 28 августа 2008

Ряд форм в моем проекте наследуются от базовой формы. В коллекцию Controls производных форм легко попасть, но я не нашел простого способа доступа к коллекции Components, поскольку VS помечает это как закрытое.

Я предполагаю, что это можно сделать с помощью рефлексии, но я не совсем уверен, как лучше это сделать, если раньше не работал с рефлексией.

Прямо сейчас я использую своего рода неуклюжий обходной путь, в котором я переопределяю функцию GetComponents и возвращаю массив интересующих меня компонентов. Это, очевидно, подвержено ошибкам, так как легко забыть реализовать переопределить функцию или обновить ее при добавлении компонентов.

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

Ответы [ 3 ]

1 голос
/ 28 августа 2008

Если вы установите для свойства Modifiers ваших компонентов строго защищенные, они будут доступны без использования коллекции компонентов.

Edit: Обнаружение может быть сделано с помощью отражения, чтобы пройтись по каждому полю. Хотя это может быть неоптимальным в вашем случае.

0 голосов
/ 09 июня 2013

Установите модификатор 'компонентов' на защищенный в вашем базовом классе формы. Удалите объявление «компоненты» во всех производных формах.

Вызовите этот метод ниже в событии загрузки базовой формы,

        public void SetComponentsStyle()
    {
        if (null != this.components)
        {
            foreach (Component comp in this.components.Components)
            {
                if (comp is ToolTip)
                {

                }
                else if (comp is ContextMenuStrip)
                {

                }
            }
        }
    }
0 голосов
/ 28 августа 2008

Если вы беспокоитесь о том, что забыли переопределить функцию, сделайте ее абстрактной.

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