UserControl не может быть отображен в Designer - нулевая ссылка на объект

2

У меня есть UserControl с выпадающим списком. Этот combobox заполняется из xml, когда этого нет, он загружается из файла ресурсов.
Он отлично работает в программе, но не может отображаться в дизайнере - он говорит: "Ссылка на объект не установлена ​​в экземпляр объекта".

В классе, ответственном за загрузку списка из xml, проверка нулевой ссылки пропускается по причинам, отличным от моего понимания...

public SortedDictionary<string, string> Countries
{
    get
    {
        if (object.ReferenceEquals(countries, null))
        {
            GetCountryList();
        }
        return countries;
    }
}

Заполнение comboBox происходит следующим образом:

comboBoxCountry.DataSource = new BindingSource(Program.language.Countries, null);

Program.language инициализируется в программе, но это не помогает дизайнеру.

Вопрос в том, как (когда, на каком событии) я должен заполнить ComboBox (= список загрузки из xml), чтобы иметь возможность отображать мой элемент управления в дизайнере.

Теги:
user-controls
visual-studio-2008

2 ответа

4
Лучший ответ

Если возможно, вы хотите проверить this.DesignMode, а затем просто не загружать ComboBox во время разработки.

  • 0
    Кажется, это работает. Есть ли какая-то причина, почему <code> if (! This.DesignMode </ code> не работает в конструкторе компонента, а работает в событии Load?
  • 0
    Когда вы говорите, что это не работает, что происходит?
Показать ещё 1 комментарий
0

Установил ли GetCountryList() переменную-член? Если это так, переместите этот вызов на метод. Атрибуты свойств get и метод ToString() считаются чистыми: состояние программы до и после должно быть идентичным. Нарушение этого предположения может вызвать всевозможные проблемы, особенно несоответствие конструктора/отладчика/времени выполнения. Были разные разборы, но самое лучшее, что нужно сделать, это понять предположение, следовать ему и позволить ему работать в ваших интересах при отладке.

  • 0
    Да, он инициализирует один. По сути, это означает, что перед получением свойства мне нужно вручную вызвать метод, заполняющий список, и тем самым предоставить все данные, необходимые для свойства. Я прав?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню