Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Пользовательские элементы управления
Тестирование пользовательских элементов BeepButton и MyDialogBox
- Добавьте к решению MySolution новый проект с именем Test типа Windows Application. Для этого выполните команду меню оболочки File/Add/New Project и заполните окно мастера примерно так
- В панели Solution Explorer выделите узел проекта Test и назначьте его стартовым командой Project/Set as StartUp Project меню оболочки или аналогичной командой контекстного меню
- Выделите форму Form1 и настройте ее свойства как показано в таблице
Свойство | Значение | Пояснения |
---|---|---|
Text | Кнопка со звуком | Заголовок тестового окна |
StartPosition | CenterScreen | Открывать в центре экрана |
- Поместите из панели Toolbox на верхнюю часть формы экземпляр textBox1 текстового поля TextBox
- Поместите из панели Toolbox на середину формы разработанную нами кнопку BeepButton и настройте ее в соответствии с таблицей
Свойство | Значение | Пояснения |
---|---|---|
AutoSize | true | Подстраиваться под содержимое |
Text | Звукнуть | Надпись |
Location | 100; 100 | Позиционировали |
- Для выделенного экземпляра кнопки BeepButton переведите панель Properties оболочки в режим Events и в поле события Click задайте имя обработчика ButtonOnClick
- Заполните обработчик кодом вызова нашего диалогового окна MyDialogBox так
private void ButtonOnClick(object sender, EventArgs e) { string msg; if (textBox1.Text.Trim().Length == 0) msg = "Щелкнули на кнопке"; else msg = textBox1.Text.Trim(); // Запускаем наше диалоговое окно статическим методом MyDialogBox.Show(msg, this.Text); }Листинг 17.4 . Обработчик события Click звуковой кнопки BeepButton
- Добавьте в начало файла Form1.cs строку кода подключения пространства имен нашей библиотеки элементов
using MyCompany.UserControls;
для того, чтобы иметь возможность написать сокращенное имя класса MyDialogBox
- Выполните приложение и получите примерно такой результат
В производном от кнопки классе BeepButton мы только переопределили виртуальный метод OnClick(), в который встроили вызов звукового сигнала. В вызывающем коде тестового приложения, использующем экземпляр класса расширения кнопки, мы подписались на событие Click, чтобы щелчок на кнопке запускал самодельное диалоговое окно.
Но мы этот метод перехватили в нашем расширении, и если не предусмотреть передачу вызова base.OnClick(e) дальше по цепочке наследования в класс Control, то событие Click инициировано не будет и наш зарегистрированный обработчик ButtonOnClick() никогда не сработает. А значит и наше диалоговое окно вызываться не будет (попробуйте закоментировать вызов base.OnClick(e) в файле BeepButton.cs ).
Таким образом, в переопределенном методе OnClick(), который срабатывает автоматически при щелчке на кнопке, вызывается звуковой сигнал. А при вызове этого метода в базовом классе генерируется событие Click, которое заставляет выполниться все зарегистрированные для него обработчики. В нашем случае это один обработчик, косвенно запускающий самодельное диалоговое окно. Метод OnClick() для кнопок вызывается и в тех случаях, когда кнопка имеет текущий фокус ввода и нажимается клавиша Enter или Space (пробел).
Если в переопределенном методе OnClick() класса BeepButton поменять местами строки вызова звука и события Click, то звук появится только после закрытия диалогового окна (попробуйте).
Обратите внимание, что при формировании интерфейса диалогового окна мы не расставляли по форме кнопку и текстовую метку. Но за счет применения библиотечного компонента FlowLayoutPanel эти элементы на этапе выполнения позиционируются автоматически.