Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 17:

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

Аннотация: Как правило, библиотечных элементов управления достаточно для решения большинства задач, но иногда программисту может потребоваться нестандартный элемент управления. В таком случае он может разработать свой элемент управления с нуля или расширить стандартный элемент.. В лекции рассматривается реализация пользовательских элементов управления.

Файлы к лекции Вы можете скачать здесь.

Элементы управления являются посредниками между приложением и пользователем. Они составляют так называемый графический интерфейс пользователя (GUI - Graphics User Interface ). Их задача состоит в отображении информации для пользователя, обеспечении удобного ввода и генерации событий, отрабатывающих предпочтения пользователя.

Как правило, библиотечных элементов управления достаточно для решения большинства задач, но иногда программисту может потребоваться нестандартный элемент управления. В таком случае он может разработать свой элемент управления с нуля или расширить стандартный элемент. Такой элемент управления называют пользовательским.

Механизм наследования C# предоставляет широкие возможности модификации существующих элементов управления на уровне расширения классов. Беря за основу библиотечный элемент управления, мы можем использовать его в качестве базового и внутри производного класса (расширения) переопределять виртуальные методы и свойства, добавлять новые поля, свойства, события.

Упражнение 1. Построение элемента управления BeepButton

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

Создание заготовки библиотеки компонентов
  • Создайте новый пустой проект командой File/New/Project и заполните окно мастера так

  • В панели Solution Explorer выделите корневой узел проекта UserControls и через контекстное меню выполните команду Properties

  • Откройте вкладку Application свойств оболочки и настройте поля Default namespace и Output type как показано на рисунке

  • В панели Solution Explorer вызовите для корневого узла проекта UserControls контекстное меню и выполните команду Add/Component

  • Добавьте к проекту новый файл компонента с именем BeepButton.cs

  • В рабочей области конструктора форм щелкните на ссылке click here to switch to code view или исполните команду контекстного меню View Code, чтобы перейти в режим редактирования кода

  • В панели Solution Explorer для узла References, где уже должна находиться ссылка на библиотечную сборку System, выполните команду Add Reference

  • Удерживая клавишу Ctrl через окно Add Reference выделите и добавьте к проекту ссылки на библиотечные сборки System.Drawing и System.Windows.Forms

  • Убедитесь, что теперь узел References проекта стал выглядеть так

  • Перейдите в режим редактирования файла BeepButton.cs и откорректируйте его так
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
  
using System.Media; // Для звука 
    
namespace MyCompany.UserControls
{
    public partial class BeepButton : Button 
    {
        public BeepButton()
        {
            InitializeComponent();
        }
    
        public BeepButton(IContainer container)
        {
            container.Add(this);
    
            InitializeComponent();
        }
    }
}
Листинг 17.1 . Файл BeepButton.cs после корректировки

Класс Button является наследником класса Component, поэтому мы спокойно применяем его в качестве базового, продолжая цепочку наследования.


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

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

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

 

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

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