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

Стандартные элементы управления

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

В библиотеке .NET Framework 2.0 в пространстве имен { } System.Windows.Forms имеется абстрактный класс TextBoxBase, который обеспечивает производные от него классы множеством возможностей по редактированию текста. Цепочка наследования этих классов выглядит так


Из рисунка видно, что существуют 5 классов, способных порождать текстовые элементы управления:

  1. MaskedTextBox
  2. RichTextBox
  3. TextBox
  4. DataGridTextBox
  5. DataGridViewTextBoxEditingControl

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

Текстовый элемент с маской MaskedTextBox

Этот элемент удобно применить в том случае, когда нужно контролировать пользовательский ввод. Приведем пример с вводом телефонного номера. Вот какое поле ввода можно было бы предоставить пользователю

using System;
using System.Drawing;
using System.Windows.Forms;
    
namespace Test
{
    // Класс приложения
    class MyClass : Form
    {
        // Объявляем ссылку на элемент поля ввода телефона
        MaskedTextBox phone;
    
        public MyClass()    // Конструктор
        {
            // Код из конструктора переносим в обработчик
            this.Load += new EventHandler(MyClass_Load);
        }
    
        void MyClass_Load(object sender, EventArgs e)
        {
            // Текст заголовка окна
            this.Text = "Элемент MaskedTextBox";
            // Отключаем размеры
            this.MaximizeBox = false;
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
    
            // Создаем элемент маскированного поля ввода телефона
            phone = new MaskedTextBox();
            phone.Parent = this;// Привязываем к форме
    
            // Настраиваем маскированное поле ввода
            int x = (this.ClientSize.Width - phone.Width) / 2;
            int y = this.ClientSize.Height / 3 - phone.Height;
            phone.Location = new Point(x, y);
            phone.Mask = "00-00-00";
            Font font = new Font("Arial", 12, FontStyle.Bold);
            phone.Font = font;
            phone.ForeColor = Color.Blue;// Синий
    
            // Регистрируем событие, когда символ не может быть принят полем
            phone.MaskInputRejected += phone_MaskInputRejected;
    
            // Создаем и настраиваем текстовую метку
            Label label = new Label();
            label.Text = "Введите номер телефона";
            label.Parent = this;
            label.Width = this.ClientSize.Width;
            label.Font = font;
            label.ForeColor = Color.FromArgb(255, 0, 0);// Красный
            // Позиционируем метку над полем ввода
            label.Location = new Point(10, phone.Location.Y - 
		label.Height - 10);
        }
    
        ToolTip toolTip = new ToolTip();// Содаем объект всплывающей подсказки
    
        void phone_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
            if (phone.MaskFull)
            {
                toolTip.ToolTipTitle = "Ввод отклонен - 
			поле заполнено";
                // Позиционируем всплывающую подсказку относительно поля ввода
                toolTip.Show("Вы пытаетесь ввести" + 
			"\n" + "слишком длинный номер",
                    phone, // Привязка к элементу
                    -phone.Location.X,// Сдвинули в начало окна
                    phone.Height, // Сдвинули к низу поля ввода
                    3000);// Подсказка ждет 3 секунды
            }
            else if (e.Position >= phone.Mask.Length)
            {
                toolTip.ToolTipTitle = "Ввод отклонен - 
			выход за границу";
                // Позиционируем всплывающую подсказку относительно поля ввода
                toolTip.Show("Не могу добавить новый 
			символ\nза границей поля ввода",
                    phone, // Привязка к элементу
                    -phone.Location.X,// Сдвинули в начало окна
                    phone.Height, // Сдвинули к низу поля ввода
                    3000);// Подсказка ждет 3 секунды
            }
            else
            {
                toolTip.ToolTipTitle = "Ввод отклонен - 
					нужны цифры";
                // Позиционируем всплывающую подсказку относительно поля ввода
                toolTip.Show(
                    "Номер телефона должен состоять 
			только из цифр (0-9)",
                    phone, // Привязка к элементу
                    -phone.Location.X,// Сдвинули в начало окна
                    phone.Height, // Сдвинули к низу поля ввода
                    3000);// Подсказка ждет 3 секунды
            }
        }
    }
    
    // Запуск
    class Program
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new MyClass());
        }
    }
}
Листинг 15.5 . Применение MaskedTextBox для контроля ввода телефонного номера

Результат выполнения выглядит так


Граждане студенты! Это мой телефон, но не вздумайте звонить.

Элементы строкового свойства Mask могут быть такими

Таблица 15.3 . Элементы свойства Mask
Маскирующий элемент Пояснения
0 Ожидает любую цифру от 0 до 9
9 Ожидается цифра или пробел
# Ожидается цифра, пробел, знаки + или -
L Ожидаются ASCII -символы от a до z или от A до Z
? Ожидаются любые ASCII -символы
& Ожидается любой символ. Если свойство AsciiOnly равно true, то работает как элемент "L"
C Ожидается любой неуправляющий символ. Если свойство AsciiOnly равно true, то работает как элемент "?"
A Ожидает любые алфавитно-цифровые символы. Если AsciiOnly равно true, то работает как элемент "L"
И так далее по MSDN
Максим Филатов
Максим Филатов

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

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

 

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