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

Типы данных C#

Перечисления как члены класса

Перечисления могут быть и членами класса

using System;
    
namespace Test
{
    class EntryPoint
    {
        enum Fruit // Фрукты
        {
            Apples,
            Plums,
            Cherries,
            Grapes,
            Pears
        }
    
        static void Main()
        {
        // Настройка консоли
        Console.Title = "Использование перечислений";
        Console.ForegroundColor = ConsoleColor.White;
        Console.CursorVisible = false;
    
        // Объявляем переменную перечислимого типа
        Fruit fruit;
    
        // Используем переменную перечисления для обхода всех членов
        for (fruit = Fruit.Apples; fruit <= Fruit.Pears; fruit++)
          Console.WriteLine(fruit + " имеет 
              значение " + (int)fruit);
    
        Console.ReadLine();// Для задержки окна
        }
    }
}
Листинг 4.10. Перечисления как члены класса

Использование библиотечного перечисления Keys для распознавания клавиш

Приведенные способы применения перечислений встречаются очень редко, чаще используется прямое назначение перечислений как набора именованных целочисленных констант, упакованных в одном блоке кода. Библиотека .NET Framework содержит множество полезных перечислений, облегчающих программисту жизнь. Одно из таких перечислений System.Windows.Forms.Keys, содержащееся в одноименной библиотечной сборке System.Windows.Forms.dll.

using System;
using System.Windows.Forms;
using System.Drawing;
    
// Подключить через оболочку соответствующие сборки!!!!!!!!!!!
namespace Test
{
    class MyClass : Form
    {
        // Сообщение в окне
        string messageKey = "Нажимайте клавиши";
    
        public MyClass()    // Конструктор формы
        {
            // Настройка формы
    
            try // Безопасный код загрузки иконки
            {
                this.Icon = new Icon("1.ICO");
            }
            catch { /* На исключения не реагировать */ }
    
            this.Text = "Перечисление Keys";
            this.Font = new Font("Arial", 14, FontStyle.Bold);
        }
    
        // Перегрузка метода OnPaint(), наследуемого от класса Control
        protected override void OnPaint(PaintEventArgs e)
        {
        Form frm = this;
        Graphics gr = e.Graphics;// Контекст экрана
        // Создаем и настраиваем точку привязки текстового блока
        StringFormat strfrm = new StringFormat();
        strfrm.Alignment = StringAlignment.Center;// Центр по горизонтали
        strfrm.LineAlignment = StringAlignment.Center;// Центр по вертикали
    
        // Точка привязки на форме
        PointF point = new PointF(frm.ClientSize.Width / 2,
                frm.ClientSize.Height / 2);
    
        // Выводим содержимое строки поля класса
        gr.DrawString(messageKey,
        frm.Font, // Применяется шрифт окна
        new SolidBrush(Color.Red),  // Цвет шрифта
        point, // Точка привязки на форме
        strfrm); // Передаем точку привязки текстового блока
    
        // Выполняем обработчик события до полной глубины наследования
        base.OnPaint(e);
        }
    
        // Перегрузка метода OnKeyUp(), наследуемого от класса Control
        protected override void OnKeyUp(KeyEventArgs e)
        {
        // Временно сохраняем подсказку
        string mess = messageKey;
    
        // Анализируем нажатую клавишу
        switch (e.KeyCode)
        {
        case Keys.X:
        case Keys.Enter:
        case Keys.Escape:
          messageKey = "Нажата клавиша " + e.KeyCode
            + "\nAscii-код клавиши " + (byte)(e.KeyCode)
            + "\nЧто-то делаем...";
            break;
        case Keys.Space:
          messageKey = "Нажата клавиша " + Keys.Space
            + "\nAscii-код клавиши " + (byte)(Keys.Space)
            + "\nЧто-то делаем...";
            break;
        default:
          messageKey = "Нажата " + e.KeyCode
            + "\nAscii-код клавиши " + (byte)(e.KeyCode)
            + "\nОна нам не нужна!";
            break;
        }
        // Инициируем немедленную перерисовку формы
        // для вывода нового сообщения
        this.Refresh();
        //this.Invalidate(); // Удаляется из очереди при задержке потока
    
        // Усыпляем текущий поток на две секунды
        System.Threading.Thread.Sleep(2000);
    
        // Восстанавливаем подсказку
        messageKey = mess;
        // Инициируем перерисовку формы
        // для вывода восстановленной подсказки
        this.Invalidate();
    
        // Выполняем обработчик события до полной глубины наследования
        base.OnKeyUp(e);
        }
    }
}
    
namespace Test
{
    class EntryPoint
    {
        static void Main()
        {
            // Настройка стиля формы
            Application.EnableVisualStyles();
            // Цикл сообщений Windows
            Application.Run(new MyClass());
        }
    }
}
Листинг 4.11. Библиотечное перечисление Keys (файл MyClass.cs)

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

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

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

 

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