Читаем Разработка пользовательского интерфейса на основе технологии Windows Presentation Foundation полностью

2. Указание обработчиков событий, подобных событию TextChanged, непосредственно в xaml-файле может приводить к неожиданным ошибкам. Например, если закомментировать условный оператор в методе textBox1_TextChanged

screen_image_61_138_60

то при запуске программы возникнет исключение NullReferenceException («Ссылка на объект не указывает на экземпляр объекта»). Это связано с тем, что в WPF событие TextChanged возникает сразу после конструирования поля ввода (при присваивания свойству Text начального значения). Но в момент создания поля ввода textBox1 метка label2 еще не существует, поскольку компоненты создаются в порядке их указания в xaml-файле, что и приводит к возникновению исключения.

Мы избежали этой ошибки, добавив проверку в обработчик. Исправить подобную ошибку можно и другим способом: не добавляя проверку в метод textBox1_TextChanged, удалить оба атрибута TextChanged="textBox1_TextChanged" в xaml-файле и вместо этого добавить в конец конструктора MainWindow операторы

screen_image_61_296_60

Благодаря этим операторам связывание события TextChanged с обработчиками будет происходить уже после создания всех компонентов окна, и попытки обращения к неинициализированной метке не произойдет.

При анализе данного исправления возникает естественный вопрос: можно ли в программном коде связать требуемый обработчик с общим родителем обоих полей ввода – панелью StackPanel (подобно тому, как это делается в xaml-файле – см. комментарий 1)? Этому препятствуют два обстоятельства: во-первых, данная панель не имеет имени, с помощью которого к ней можно было бы обратиться в коде, и, во-вторых, в компоненте StackPanel отсутствует событие TextChanged. Первую проблему легко решить, добавив к описанию панели в xaml-файле атрибут x:Name. Вторая проблема решается благодаря наличию у любого компонента метода AddHandler, позволяющего связать с компонентом обработчик события даже в случае, если это событие для компонента не предусмотрено. Между прочим, первую из отмеченных проблем можно вообще не решать, если связать обработчик с родителем более высокого уровня – окном MainWindow. Таким образом, вместо указанных выше двух операторов достаточно добавить в конструктор окна следующий вызов метода AddHandler:

screen_image_62_56_45

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

4. Работа с датами и временем: CLOCK

screen_image_63_114_82

Рис. 14. Окно приложения CLOCK


4.1. Отображение текущего времени

screen_image_63_279_75


Перейти на страницу:

Похожие книги

Теория государства и права
Теория государства и права

Учебник, написанный в соответствии с курсом «Теория государства и права» для юридических РІСѓР·ов, качественно отличается РѕС' выходивших ранее книг по этой дисциплине. Сохраняя все то ценное, что наработано в теоретико-правовой мысли за предыдущие РіРѕРґС‹, автор вместе с тем решительно отходит РѕС' вульгаризированных догм и методов, существенно обновляет и переосмысливает РІРѕРїСЂРѕСЃС‹ возникновения, развития и функционирования государства и права.Книга, посвященная современной теории государства и права, содержит СЂСЏРґ принципиально новых тем. Впервые на высоком теоретическом СѓСЂРѕРІРЅРµ осмыслены и изложены РІРѕРїСЂРѕСЃС‹ новых государственно-правовых процессов современного СЂРѕСЃСЃРёР№ского общества. Дается характеристика гражданского общества в его соотношении с правом и государством.Для студентов, аспирантов, преподавателей и научных работников юридических РІСѓР·ов.Р

Алла Робертовна Швандерова , Анатолий Борисович Венгеров , Валерий Кулиевич Цечоев , Михаил Борисович Смоленский , Сергей Сергеевич Алексеев

Детская образовательная литература / Государство и право / Юриспруденция / Учебники и пособия / Прочая научная литература / Образование и наука
История Беларуси. С древнейших времен до 2013 г.
История Беларуси. С древнейших времен до 2013 г.

Представлена история Беларуси с древнейших времен до наших дней. Освещаются проблемы этногенеза (происхождения) белорусов, формирования белорусской народности и нации, становления белорусской государственности, социально-экономического, политического и культурного развития белорусских земель в составе Древнерусского государства, Великого Княжества Литовского, Речи Посполитой, Российской империи. Особое внимание уделяется истории советского периода, советской модели модернизации общества, проблемам развития суверенной Республики Беларусь.Первое издание вышло в 2010 г.Для студентов и преподавателей высших учебных заведений, а также учащихся средних специальных и профессионально-технических учебных заведений, лицеев, гимназий, всех, кто интересуется историей Отечества.

Евгений Константинови Новик , Игорь Леонидович Качалов , Наталия Евгеньевна Новик

Детская образовательная литература / История / Учебники и пособия ВУЗов / Книги Для Детей / Образование и наука