Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2010, 10:19   #1
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию События в WPF. Обращение к компонентам формы из события

Здравствуйте. Есть такой вопрос - Почему в WPF, если я создал событие стандартным способом (в окне свойств щелчок по вкладке "События" и двойной клик по пустому полю напротив названия нужного события), то во время запуска приложения вылетает ошибка, она вылетает в том случае, если я в событии обращаюсь к какому либо компоненту расположенному в окне.

Ошибка:
System.NullReferenceException не обработано пользовательским кодом
Message=Ссылка на объект не указывает на экземпляр объекта.

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

Код:
        public WindowAdd()
        {
            InitializeComponent();

            //Подписываем здесь, так как выпала ошибка, потому-что срабатывало событие раньше, 
            //чем инициализировались изменяемые элементы в обработчике этих событий
            this.chBoxPlayMusic.Checked += new RoutedEventHandler(ChangeEnabledControls);
            this.chBoxPlayMusic.Unchecked += new RoutedEventHandler(ChangeEnabledControls);
        }

Ну как-то же это решается? Не ставить же теперь в каждое событие try {} catch(Exception exc) {}

Последний раз редактировалось Casper-SC; 24.07.2010 в 16:23.
Casper-SC вне форума Ответить с цитированием
Старый 25.07.2010, 10:23   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Ну если вообще идет речь о безсбойности программы... то почему бы и нет? ну можно также ( if(чтото == null) ... ну и тд проверять...)
Это во многих программах примерно так и реализованно... особенно сетевых...
для примера
try{подключение к серверу}
catch{не могу подключиться к серверу}
dampirik вне форума Ответить с цитированием
Старый 25.07.2010, 16:45   #3
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Это всё я знаю. Просто в WinForms таких проблем не было. Как мне подсказали на другом форуме, это из-за очень большого числа компонентов на форме, так как они не успели ещё создаться, а событие для созданного уже компонента начинает отрабатывать, а в обработчике я обращаюсь к другому компоненту, который ещё не создан. Короче я решил эту проблему, просто в конструкторе подписываю контролы на события после InitializeComponent();

Последний раз редактировалось Casper-SC; 25.07.2010 в 22:11.
Casper-SC вне форума Ответить с цитированием
Старый 25.07.2010, 19:03   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Пробуйте On Window Load событие, там все будет ок
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов события из произвольного участка кода в WPF Casper-SC Общие вопросы .NET 1 24.07.2010 10:23
Synchronize() и события формы RusikOk Общие вопросы C/C++ 0 24.07.2010 08:52
События/Сообщения для формы в dll spamer Общие вопросы Delphi 10 01.02.2010 22:32
События формы Shouldercannon Общие вопросы Delphi 10 13.01.2009 01:32
Создание события формы, доступного в Disign-time Fausto Компоненты Delphi 4 06.06.2008 16:12