Когда элемент управления создается, он еще не будет добавлен в форму - поэтому, конечно, родительская форма будет нулевой.
Даже если вы обычно пишете его как:
// Where form might be "this"
form.Controls.Add(new UserControl1());
Вы должны думать об этом как:
UserControl1 tmp = new UserControl1();
form.Controls.Add(tmp);
Теперь ваш конструктор выполняется в строке first , но первое упоминание form
находится в вторая строка ... так как же элемент управления может иметь какую-либо видимость этого?
Вы, вероятно, должны обрабатывать событие ParentChanged
и принимать соответствующиедействие тогда.(Извините, если вы не используете Windows Forms - я уверен, что есть эквивалент для других структур пользовательского интерфейса; в следующий раз было бы полезно, если бы вы могли указать, что вы используете в вопросе.)