У меня есть странная проблема, которая имеет обходной путь, но я хочу, чтобы код был как можно более похожим.Проблема связана с конкретной переменной в базовом классе для моих пользовательских элементов управления, которая может быть или не быть нулевой, и она никогда не должна быть нулевой.
В основном у меня есть несколько пользовательских элементов управления с одним базовым классом, который захватывает экземпляр моего основного окна формы, поэтому пользовательский элемент управления имеет доступ к основным свойствам формы и может вызывать методы в главной форме.Вот фрагмент кода (this.frmParent является открытым членом):
private void ucBase_Load( object sender, EventArgs e )
{
// Establish the link to the main form.
this.frmParent = FindForm() as frmMain;
}
Тогда каждый пользовательский элемент управления разделяет этот базовый класс:
public partial class ucLiberty : ucBase
Затем в основной форме явызвать пользовательский элемент управления следующим образом:
ucLiberty Liberty = new ucLiberty();
IQDevicePath = Liberty.GetIQDrivePath();
По какой-то причине, когда я создаю экземпляр пользовательского элемента управления (в данном случае он находится в основной форме), переменная frmParent в базовом классе может быть заполнена или не заполненас ненулевым значением.
Я заметил, что событие загрузки в пользовательском элементе управления не запускается.Я нашел метод CreateControl (), который должен форсировать создание элемента управления, и затем мое событие загрузки начало срабатывать, однако, когда я проследил выполнение в отладчике и попал в базовый класс, где он пытался заполнить frmParent,FindForm () не всегда возвращает ненулевое значение.
У меня есть другие пользовательские элементы управления, с которыми у меня нет этой проблемы, и разница между ними заключается в том, что некоторые пользовательские элементы управления имеют дочерние элементы управления, а некоторые - нет.есть дочерние элементы управления.У одного без дочерних элементов управления есть эта проблема.
Мой обходной путь - отслеживать, в каком пользовательском элементе управления происходит сбой FindForm (), и в событии загрузки этого пользовательского элемента управления присваивать значение с помощью вызова конструктора главной формы, что-токак это:
this.frmParent = new frmMain();
Однако мне все еще нужно вызывать CreateControl () для запуска события load, и мне не нравится идея требовать, чтобы будущие сопровождающие имели явные знанияразличных поведенческих императивов.Другими словами, я бы хотел, чтобы все мои пользовательские элементы управления работали одинаково для простоты обслуживания.
Я разорвал свой код на части и не могу понять, почему иногда событие загрузки пользовательского элемента управления может запускаться или не срабатывать.и почему не удается вызвать FindForm () в базовом классе пользовательского элемента управления.
У кого-нибудь есть идеи по поводу решения этих проблем?Благодарю.