Несвязанная ошибка времени выполнения с неиспользованным объявлением класса - PullRequest
0 голосов
/ 15 февраля 2012

Я работал над быстрой программой WinForms.Я нашел этот SO вопрос о том, как обновить ListBox, и мне показался интересным ответ Брэда Брюса, хотя я знаю, что связывание - это правильный способ решения проблемы.Поэтому я решил попробовать его решение по наследованию ListBox и объявил аналогичный класс (имена были изменены, чтобы его было легче читать):

public class AustinListBox : ListBox
{
    public void AustinRefreshItems() 
    { 
        RefreshItems(); 
    }
}

Обратите внимание, мой код скомпилирован и работал отлично, прежде чем я набрал этот код.После объявления этого и без ссылки на этот новый класс я пошел, чтобы запустить программу ... и BAM мне дали ошибку времени выполнения, говоря, что 2 toolStripButtons (которые, кстати, являются заполнителями, я ничего не изменил в них, и они неиспользовал нигде) не смог загрузить свое изображение.И все же изображения по умолчанию расположены в Form1.resx, как и прежде.Это также не позволило бы мне просмотреть дизайн Form1.

Какое неиспользуемое объявление класса связано с двумя изображениями toolStripbutton по умолчанию во время выполнения?Если я закомментирую 7 строк кода AustinListBox, все снова будет работать волшебным образом.

1 Ответ

2 голосов
/ 15 февраля 2012

Это также не позволило бы мне просмотреть дизайн формы 1.

Разработчик формы требует, чтобы проектируемая форма была первым классом, определенным в файле.Если вы поместите определение класса вверху файла кода, который содержит класс формы, конструктор не будет работать.

Почему ошибка во время выполнения?Компилятор генерирует файл ресурсов, содержащий изображения для ваших кнопок StatusStrip.Кажется, что размещение класса перед классом формы не позволило связать эти ресурсы со сборкой, поэтому загрузчик ресурсов выдает исключение при поиске этих ресурсов изображения во время выполнения.

Просто поместите определение класса нижеопределение формы, внутри определения формы (при необходимости) или в отдельном файле.Последнее является общепринятой передовой практикой для общедоступных классов.

В этом случае, поскольку ваши подклассы класса Компонент , вы должны поместить его в отдельный файл.Когда вы это сделаете, у него будет другой значок в обозревателе решений, обозначающий его как компонент.Он также получит собственный файл .resx, и вы можете использовать конструктор для добавления в него других компонентов.

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