Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 17:

Пользовательские элементы управления

Тестирование пользовательских элементов BeepButton и MyDialogBox
  • Добавьте к решению MySolution новый проект с именем Test типа Windows Application. Для этого выполните команду меню оболочки File/Add/New Project и заполните окно мастера примерно так

  • В панели Solution Explorer выделите узел проекта Test и назначьте его стартовым командой Project/Set as StartUp Project меню оболочки или аналогичной командой контекстного меню
  • Выделите форму Form1 и настройте ее свойства как показано в таблице
Таблица 17.5 . Таблица свойств формы тестового приложения
Свойство Значение Пояснения
Text Кнопка со звуком Заголовок тестового окна
StartPosition CenterScreen Открывать в центре экрана
  • Поместите из панели Toolbox на верхнюю часть формы экземпляр textBox1 текстового поля TextBox
  • Поместите из панели Toolbox на середину формы разработанную нами кнопку BeepButton и настройте ее в соответствии с таблицей
Таблица 17.6 . Таблица свойств кнопки 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 эти элементы на этапе выполнения позиционируются автоматически.

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?