Невозможно привести объект типа «System.Windows.Forms.Form» к типу «Project.Form1». - PullRequest
4 голосов
/ 25 апреля 2011

У меня есть UserControl, который использует некоторые из общедоступных свойств, которые у меня есть в моей Форме, в верхней части события Paint для этого UserControl, я ссылаюсь на Parent элемента управления и приведениеэто тип моей формы.

var _parent = (Form1)Parent;

Этот код работает, однако, в представлении «Дизайн» выдается ошибка, и все, что я вижу вместо UserControl, - это белое поле, отображающее ошибку вНазвание этого поста.Трассировка стека ведет непосредственно к этой строке кода.

Прямо сейчас я исправил эту ошибку, перенаправив это приведение через Свойство в моем UserControl

    public Form1 ControlParent
    {
        get
        {
            if (Parent != null)
            {
                return (Form1)Parent;
            }
            return null;
        }
    }

Это своего роданемного за что-то, что просто нарушает представление о дизайне .. какие-нибудь другие идеи?

Ответы [ 3 ]

4 голосов
/ 25 апреля 2011

Судя по коду, ваш дочерний экземпляр Control уже может иметь дело с ControlParent, равным null.Следовательно, самое простое решение - сделать следующее:

public Form1 ControlParent
{
    get
    {
        return Parent as Form1;
    }
}

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

0 голосов
/ 25 апреля 2011

Вы можете попытаться, установив владельца формы, а затем получить доступ к этому свойству, как вы пытаетесь через родительское свойство.

0 голосов
/ 25 апреля 2011

Вы проверяли, что родительский элемент не является нулевым в первом коде?

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