как ссылка parentForm равна нулю? - PullRequest
5 голосов
/ 09 января 2012

У меня есть приложение, в котором я добавил usercontrol в форму. Когда я проверяю this.parentForm в конструкторе userControl, он дает нулевую ссылку

Мой код пользователя похож на

public UserControl1()
        {
            InitializeComponent();
            if (this.ParentForm != null)//ParentReference is null
            {
                MessageBox.Show("Hi");//Does Not get Called
            }
        }

Ответы [ 2 ]

8 голосов
/ 09 января 2012

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

Даже если вы обычно пишете его как:

// Where form might be "this"
form.Controls.Add(new UserControl1());

Вы должны думать об этом как:

UserControl1 tmp = new UserControl1();
form.Controls.Add(tmp);

Теперь ваш конструктор выполняется в строке first , но первое упоминание form находится в вторая строка ... так как же элемент управления может иметь какую-либо видимость этого?

Вы, вероятно, должны обрабатывать событие ParentChanged и принимать соответствующиедействие тогда.(Извините, если вы не используете Windows Forms - я уверен, что есть эквивалент для других структур пользовательского интерфейса; в следующий раз было бы полезно, если бы вы могли указать, что вы используете в вопросе.)

0 голосов
/ 09 января 2012

для того, что вы добавили эту строку на самом деле не нужно, удалите эту строку

 if (this.ParentForm != null)//ParentReference is null

public UserControl1()
        {
            InitializeComponent();            
            MessageBox.Show("Hi");//Does Not get Called

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