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

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

 

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

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