Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 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. Ввожу код на сайте, пишет:

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

 

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

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974