Ввод и отображение текстовой информации
Функциональное назначение Label
Передача фокуса
Свойства Label
Свойства Label
Свойства Label
Свойства Label
Свойства Label
Компонент TextBox
Свойства TextBox
Свойства TextBox
Свойства TextBox
Свойства TextBox
Свойства TextBox
Методы TextBox
Методы TextBox
Вызов метода для компонента формы
Компонент RichTextBox
Пример
Пример
Пример
Преобразование типов
Пример
Результат работы программы
Ввод только числовых значений
Ввод только числовых значений
Ввод только числовых значений
Ограничения для ввода
Проверка кода клавиши
Замена точки на запятую
Обработка введенной запятой
Обаботка служебных клавиш
Остальные символы запрещены
Функция для второго компонента
Проверка наличия ввода
Обработка исключения
Запрет расчета
Запрет расчета
Компонент ListBox
Свойства ListBox
Свойства ListBox
Свойства ListBox
Свойства ListBox
Использование Items
Свойства ListBox
Методы ListBox
Примеры
Примеры
Компонент ComboBox
Пример
Заполнение списка
Подстановка значений
Подстановка значений
Выбор отсутствующего
Ввод данных из файла
Ввод данных из файла
Вызов функции LoadFromFile
Компонент MaskedTextBox
Компонент MaskedTextBox
Задание маски
Специальные символы
Применение маски
Механизм ввода по маске
Свойства MaskedTextBox
Свойства MaskedTextBox
880.00K
Category: programmingprogramming

Ввод и отображение текстовой информации

1. Ввод и отображение текстовой информации

2.

Компонент Label
• находится в списке Common Controls палитры
компонентов.
• выводит в свое поле тексты или изображения,
которые пользователь в режиме исполнения
приложения не может редактировать.

3. Функциональное назначение Label

• Компонент используется, чтобы
идентифицировать некоторый объект в форме
или другом контейнере (т.е. в качестве метки к
другому компоненту)
• Фокуса ввода получать не может
• Может устанавливать фокус некоторого
компонента, куда пользователь нажимает так
называемый ключ доступа к другим компонентам
совместно с клавишей <Alt>.

4. Передача фокуса

• Фокус ввода передается компоненту, следующему по
значению его свойства TabIndex.
• В это свойство помещается сформированный средой
программирования порядковый номер компонента в
контейнере.
• Какие номера имеют свойства TabOrder, в такой
последовательности и станут активизироваться (получать
фокус ввода) компоненты в форме после запуска
приложения при последовательном нажатии клавиши
TAB.
• Если есть необходимость в изменении порядка активации,
то пользователь сам должен присвоить соответствующие
значения свойствам компонентов TabIndex.

5. Свойства Label

• Оформление, кроме цвета метки и ее
шрифта, не предусмотрено.
• Основное свойство компонента – Text,
содержит информацию, отображаемую
на форме.

6. Свойства Label

• BorderStyle задает окантовку метки.
Стиль окантовки выбирается из выпадающего
списка:
– без окантовки (по умолчанию),
– окантовка одной линией,
– окантовка под трехмерное пространство.
• TextAlign задает способ расположения
(выравнивания) текста, записываемого в поле
свойства Text (будет ли текст выравниваться по
левой, правой границе поля, по центру и т.д.).

7. Свойства Label

Anchor – свойство, определяющее закрепленную
позицию компонента.
Если форма разрабатывается таким образом,
чтобы пользователь мог изменять ее размеры в
режиме исполнения приложения, то компоненты
на такой форме должны изменяться в размерах.
Когда компонент «зацеплен» за форму, а форма
изменяется в размерах, то в случае
«зацепления» компонент поддерживает
дистанцию между собой и позицией якоря.
Это свойство взаимодействует со свойством
AutoSize.

8. Свойства Label

Dock – с помощью этого свойства обеспечивается
• причаливание (стыковка) компонентов к
различным сторонам формы
• заполнение компонентами полностью какоголибо контейнера (компонента, который может
содержать в себе другие компоненты, например,
это может быть форма или панель).
FlatStyle – задает стиль компонента.
Стиль выбирается из выпадающего списка, который открывается
кнопкой, появляющейся после щелчка мышью в поле этого
свойства.

9. Свойства Label

Image – позволяет выбрать изображение, которое
поместится в поле компонента, но при условии,
что значение свойства FlatStyle не будет
равно System.
ImageAlign – изображение выравнивается
относительно компонента.
TabStop – дает возможность отключать получение
фокуса ввода данным компонентом.
Visible – обеспечивает видимость или невидимость
компонента в режиме исполнения приложения.

10. Компонент TextBox

• Компонент находится в списке Common
Controls палитры компонентов.
• Этот компонент задает в форме
однострочное редактируемое поле,
через которое вводят/выводят
однострочные и многострочные данные.

11. Свойства TextBox

AcceptsReturn – показывает, будет ли нажатие
клавиши Enter в многострочном режиме этого
компонента создавать новую строку текста (значение
свойства равно true) или активизируется кнопка по
умолчанию для формы (значение свойства равно
false).
• Если значение равно false (по умолчанию), то пользователь
должен нажимать комбинацию клавиш Ctrl+Enter, чтобы
организовывалась новая строка в многострочном режиме
ввода.
• Если для формы не существует кнопки по умолчанию, то
нажатие Enter всегда будет создавать новую текстовую
строку, независимо от значения свойства.

12. Свойства TextBox

HideSelection задает, остается ли визуальная
индикация выделенного текста, когда фокус
ввода перемещается на другой компонент
• true – выделенный текст не меняет подсветки,
• false – подсветка исчезает при выделении
другого компонента.
Lines – с помощью этого свойства можно задавать
строки через открываемое диалоговое окно,
выводить/вводить строки в режиме работы
приложения.
Multiline – задает режим многострочного ввода.

13. Свойства TextBox

PasswordChar – если необходимо, чтобы вводимые
в поле TextBox символы не высвечивались, а
заменялись неким другим символом, как это
происходит при вводе пароля, то в это свойство
надо ввести значение такого символа, например,
«*».
При этом значение свойства Multiline должно
быть false.
ReadOnly – определяет, может ли пользователь
менять текст в поле компонента:
• при значении этого свойства true – не может,
• при значении false – может.

14. Свойства TextBox

ScrollBars – этим свойством можно воспользоваться
при многострочном режиме, когда строки не
помещаются в отведенное пространство
компонента.
Какие полосы будут отображены, можно выбрать из
выпадающего списка свойства.
При этом необходимо следить за свойством WordWrap
– горизонтальная полоса прокрутки может не
появиться.
ShortcutsEnabled – дает возможность применять
установленные в среде клавишные комбинации
быстрого вызова (например, Ctrl+Z – отмена,
Ctrl+C – копирование в буфер и т.д.).

15. Свойства TextBox

TextAlign – свойство позволяет выравнивать текст
в поле компонента, выбирая способ
выравнивания из выпадающего списка (текст
может располагаться слева, справа или по
центру поля).
WordWrap – задает возможность автоматического
переноса символов к началу следующей строки,
т.е. строку, не умещающуюся в поле ввода,
можно продолжить (не нажимая при этом
клавишу Enter).

16. Методы TextBox

AppendText – добавляет текст к текущему тексту
в окне компонента.
Clear – удаляет весь текст из поля ввода/вывода.
Copy – копирует выбранные строки в буфер
памяти.
CreateGraphics – с помощью этого метода можно
создать графический объект для рисования на
компоненте.
Cut – вырезает отмеченное множество строк в
поле ввода/вывода и помещает их в буфер
памяти.

17. Методы TextBox

DeselectAll – снимает выделение в компоненте.
Focus – устанавливает фокус ввода в компоненту.
Hide – прячет компонент от пользователя.
Paste – заменяет текущий выделенный фрагмент в
поле ввода/вывода содержимым буфера памяти.
Select – выбирает заданный текст внутри компонента.
SelectAll – выбирает весь текст внутри компонента.
Show – делает компонент видимым.
Undo – отменяет последнюю операцию
редактирования в поле ввода.

18. Вызов метода для компонента формы

this->TextBox1->имя_метода(пар);
Пример:
String ^s=”Дополнительный текст!”;
this->TextBox1->AppendText(s);

19. Компонент RichTextBox

Компонент находится в списке Common Controls
палитры компонентов.
Представляет собой окно редактирования в стиле
Windows в формате RTF, позволяющее
• выбирать атрибуты шрифта,
• осуществлять поиск текста
• и многое другое.
В остальном имеет те же свойства, события и
методы, что и TextBox.

20. Пример

• Создать калькулятор, который рассчитывает
стоимость заправки бензином на АЗС.
• Стоимость литра бензина и объем заправки
задается пользователем в компонентах TextBox.
• Определение суммы заправки производится по
нажатию на кнопку «Рассчитать».

21. Пример

• Стоимость бензина:
компонент TextBox
имя компонента litr
• Объем заправки:
• компонент TextBox
имя компонента vol

22. Пример

Написать обработчик события Click для
компонента Button.
При этом в качестве перемножаемых значений
воспользуемся информацией, из компонентов
TextBox.
Текст, содержащийся в этих компонентах, имеет
строковый, а не числовой (в данном случае
необходимо использовать double) тип =>
необходимо выполнить преобразование
типов.

23. Преобразование типов

• Строка в число:
– Вещественное - Convert::ToDouble
– Целое - Convert::ToInt32()
• Число в строку:
– Метод ToString(«параметр»)
– Значения параметра:
• «n» - информация в числовом формате с
разделителями групп разрядов.
• «c» - денежный с разделителями групп разрядов и
обозначением валюты.
• «f» - числовой без разделителей групп разрядов.

24. Пример

• Обработчик события Click для кнопки
«Рассчитать»:
double l,v;
l=Convert::ToDouble(litr->Text);
v=Convert::ToDouble(vol->Text);
double s=l*v;
MessageBox::Show("Стоимость заправки равна "
+s.ToString("n")+" руб.",
"Бензиновый калькулятор",
MessageBoxButtons::OK,
MessageBoxIcon::Asterisk);

25. Результат работы программы

26. Ввод только числовых значений

Если вводимый текст не соответствует
числу (например, содержит
недопустимые символы), то функции
преобразования выдают ошибку.

27. Ввод только числовых значений

• Способ 1. Использовать обработку
исключений try{…}catch(){…} для
обработки этой ситуации
• Это не лучший вариант для
предотвращения неправильного ввода.
• Пользователь узнает о своей ошибке
только после того, как программа
попытается использовать введенные
данные.

28. Ввод только числовых значений

• Способ 2. Спроектировать окно для
ввода текста таким образом, чтобы
пользователь не мог ввести в него
неправильные данные.
• Для этого используется событие
KeyPress, в которое передается
параметр e,
– в нем содержится код введенного символа и некоторая
сопутствующая информация.

29. Ограничения для ввода

• Пользователь может вводить только
– цифры,
– запятую (для обозначения дробной части действительных чисел),
– пользоваться клавишами удаления символов,
– клавишей Enter для фиксации ввода.
• Будем считать правильным символом и точку, но в
функции автоматически заменим ее запятой.
• Все остальные символы будут считаться
запрещенными.
• Чтобы такой символ не отображался в поле
редактирования, присвоим значение true
параметру e функции-обработчика.

30. Проверка кода клавиши

Проверим, является ли введенный символ
цифрой. Если да, то прекращаем
выполнение функции, этот символ может
быть добавлен в поле Text.
if((e->KeyChar>='0')&&(e>KeyChar<='9')){
return;
}

31. Замена точки на запятую

...если в этом есть необходимость.
if (e->KeyChar=='.'){
e->KeyChar=',';
}

32. Обработка введенной запятой

Она должна быть одна!!!
if (e->KeyChar==','){
if(litr->Text->IndexOf(',')!=1){
e->Handled=true;
}
return;
}

33. Обаботка служебных клавиш

При нажатии Enter фокус устанавливается
на кнопку.
if (Char::IsControl(e->KeyChar)){
if (e->KeyChar==(char)Keys::Enter)
button1->Focus();
return;
}

34. Остальные символы запрещены

e->Handled=true;

35. Функция для второго компонента

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

36. Проверка наличия ввода

• Прежде, чем проводить расчеты, необходимо
проверить, введены ли данные в поле
редактирования.
• Если в этом поле нет данных, то при попытке
преобразовать пустую строку в число, возникает
исключение.

37. Обработка исключения

• Текст в функции Click:
try{
double l,v;
l=Convert::ToDouble(litr->Text);
v=Convert::ToDouble(vol->Text);
MessageBox::Show("Стоимость заправки равна "
+s.ToString("n")+" руб.", "Бензиновый
калькулятор",
MessageBoxButtons::OK,
MessageBoxIcon::Asterisk);
}catch{
MessageBox::Show("Надо ввести исходные данные",
"Бензиновый калькулятор", MessageBoxButtons::OK,
MessageBoxIcon::Asterisk);
litr->Focus();
}

38. Запрет расчета

• Сделать кнопку управления расчетами активной
только в том случае, когда введены все
значения.
• Это можно реализовать с помощью обработчика
события TextChanged для компонента TextBox.
• Сначала создается функция обработки события
для компонента litr.
• Затем ее следует указать в качестве
обработчика события TextChanged для
компонента vol.

39. Запрет расчета

if ((litr->Text->Length==0)||
(vol->Text->Length==0))
button1->Enabled=false;
else
button1->Enabled=true;
Таким образом, кнопка управления расчетами становится активной
только тогда, когда в текстовые поля введены какие-либо значения.
Если при этом написан обработчик события OnKeyPress, то в окна
будут введены только числовые значения.

40. Компонент ListBox

• Компонент находится в списке Common
Controls палитры компонентов.
• Он выводит список элементов, из
которых пользователь может выбрать
как один, так и несколько элементов.
• Если количество элементов
превосходит размеры окна, то в
компоненте автоматически появляется
полоса прокрутки.

41. Свойства ListBox

SelectedIndex возвращает целочисленное
значение, которое соответствует первому
элементу в списке выбранных.
• Если выборка оказалась пустой, то значение
этого свойства устанавливается в –1.
• Значение индекса в списке изменяется с нуля.
• При многострочной выборке это свойство
возвращает индекс первого элемента из списка
выборки.
SelectedItem возвращает выбранный элемент.
Обычно это текстовая строка.

42. Свойства ListBox

Количество элементов в списке
сообщается в свойстве Count,
• значение свойства всегда на единицу
больше индекса последней строки
списка, т.к. список отсчитывается от
нуля.
ColumnWidth задает ширину колонки при
использовании многоколоночного
списка.

43. Свойства ListBox

DataSource задает источник данных, с помощью
которого можно заполнять список. Существует
два способа заполнения:
• использовать метод Add(), в этом случае
свойство DataSource должно быть отключено;
• подключаться к различным источникам данных,
доступ к которым формируется через диалоговое
окно, открывающееся кнопкой, расположенной в
поле этого свойства.

44. Свойства ListBox

Items – это элементы компонента, которые можно
не только просматривать, но и изменять.
• Для задания списка строк-элементов надо
щелкнуть на кнопке с многоточием в поле этого
свойства, чтобы открылось окно редактора,
позволяющего вводить и редактировать строки.

45. Использование Items

Извлечь строки из компонента можно так:
String ^it=ListBox1->Items[i]->ToString();
где i – номер строки (отсчет начинается с нуля).
Для того чтобы обнаружить строку, на которой был
щелчок мыши (обработка события Click) можно
так:
String ^it=this->ListBox1->
Items[this->ListBox1->
SelectedIndex]>ToString();

46. Свойства ListBox

• MultiColumn обеспечивает компоненту работу в
многоколоночном режиме (т.е. набор строк, не
помещающийся в окно, будет размещаться в
новых колонках).
• Если свойство ScrollAlwaysVisible
установлено в true, то полоса прокрутки
появляется независимо от количества
элементов.
• Свойство SelectionMode задает, сколько
элементов выбирается за один раз.

47. Методы ListBox

• Add(str) – добавить элемент в конец списка;
• Insert(i,str) – вставить элемент внутрь
списка;
• Clear() – удалить все элементы из списка;
• Remove(str) – удалить заданный элемент из
списка;
• RemoveAt(i) – удалить строку, индекс которой
указан в аргументе.

48. Примеры

Добавление элемента в список:
ListBox1->Items->Add(“Строка!!!”);

49. Примеры

Если в обработчик какого-либо события поместить
следующие операторы
ListBox1->Items->Clear();
ListBox1->Items->Add(“Строка номер 1”);
ListBox1->Items->Add(“Строка номер 2”);
ListBox1->Items->Insert(1,“Привет!”);
получим следующий список:
– Строка номер 1
– Привет!
– Строка номер 2

50. Компонент ComboBox

• Находится в списке Common Controls и
представляет собой комбинацию редактируемого
поля TextBox и списка ListBox.
• Компонент используется для вывода данных в виде
выпадающего списка и последующей выборки их из
этого списка.
• По умолчанию компонент появляется в виде окна
для ввода/вывода текста, при этом выпадающий
список скрыт.
• Многие свойства этого компонента совпадают со
свойствами компонентов ListBox и TextBox.

51. Пример

• Модифицируем программу «АЗС»
• Вместо ввода стоимости бензина, организуем
компонент ComboBox, в котором будем из списка
выбирать тип топлива:
– газ,
– дизель,
– АИ-92,
– АИ-96.
• Соответствующая каждому из видов топлива цена
будет задаваться непосредственно в тексте
программы, и пользователь изменить ее не
сможет.

52. Заполнение списка

• Поместим на форму компонент ComboBox и
назовем его Tip.
• Настройку этого компонента будет выполнять
конструктор формы: в функции Form1(void){…}
запишем:
InitializeComponent();
Tip->Items->Add(“Газ”);
Tip->Items->Add(“Дизель”);
Tip->Items->Add(“АИ-92”);
Tip->Items->Add(“АИ-96”);
По умолчанию считаем, что выбран третий элемент,
поэтому
Tip->SelectedIndex=2;

53. Подстановка значений

Обработчик события Click для кнопки
«Рассчитать».
switch (Tip->SelectedIndex){
case 0: l=22.50; break; //газ
case 1: l=29.20; break; //дизель
case 2: l=26.40; break; //АИ-92
case 3: l=28.10; break; //АИ-96
default: l=1000; //Неизвестный тип топлива
}

54. Подстановка значений

Далее расчет производится по приведенной в
предыдущем примере формуле.
Но, следует осуществить проверку, выбран ли
элемент списка, или пользователь ввел некое
значение:
if (l!=1000){
v=Convert::ToDouble(vol->Text);
double s=l*v;
...
}else{
MessageBox::Show("На нашей АЗС такого топлива нет! Выберите
топливо из списка!", "Бензиновый калькулятор",
MessageBoxButtons::OK,
MessageBoxIcon::Asterisk);
tip->Focus();

55. Выбор отсутствующего

Если пользователь выбрал элемент,
не присутствующий в списке, можно написать
обработчик события SelectedIndexChanged,
в котором, например, осуществить очистку
компонентов, в которых выводится результат.

56. Ввод данных из файла

Для загрузки данных из файла в компонент
ListBox либо ComboBox, напишем функцию,
которую назовем LoadFromFile.
В качестве параметров в нее передадим
• имя файла, в котором хранится информация,
• ссылку на компонент, в который осуществляется
загрузка.

57. Ввод данных из файла

void LoadFromFile (char *File, ListBox ^lb){
char s[300];
FILE *fp;
int i;
i=0;
lb->Items->Clear();
if (!(fp=fopen(File,"r"))){
/*Сообщение о невозможности открыть файл*/}
while(!feof(fp)){
fgets(s,300,fp);
//Преобразование char* в String
String ^dd=gcnew String(s);
//Удалим последний управляющий символ
int j=dd->Length-1;
dd=dd->Substring(0,j);
lb->Items->Add(dd);
i++;
}
}

58. Вызов функции LoadFromFile

Эта функция должна находиться в секции private
класса с формой.
Тогда эта функция будет являться членом класса
формы.
Обращение к этой функции идет как к члену класса.
Для того чтобы вызвать функцию, необходимо в
обработчике события (пусть это будет событие
Click для кнопки «Загрузить из файла») написать
следующую строку:
this->LoadFromFile
(“info.txt”,this->ListBox1);

59. Компонент MaskedTextBox

• Компонент находится в списке Common Controls
палитры компонентов.
• С помощью этого компонента создается
редактируемое текстовое поле (маска) для ввода
данных специфического формата:
– дат,
– времени,
– номеров телефонов и т.д.
• Если задан формат ввода данных по конкретной
маске, то при вводе текста проверяется,
соответствует ли он этому формату.

60. Компонент MaskedTextBox

• Маска накладывает ограничения на символы,
вводимые по ней, и на формат данных.
• Контроль ввода осуществляется посимвольно:
если пользователь попытается ввести
запрещенный в маске символ, то этот символ
системой контроля будет отвергнут.

61. Задание маски

• Маска задается в свойстве Mask.
• Существуют стандартные маски, их перечень
открывается в диалоговом окне, в которое можно
войти из свойства Mask.
• Но пользователь и сам может задать маску в
этом свойстве, пользуясь специальными
символами (Пахомов, с. 370–371)

62. Специальные символы


0 – обязательная к вводу цифра;
9 – цифра или пробел;
# – не обязательная цифра или пробел;
L – обязательная к вводу буква;
? – не обязательная к вводу буква;
& – символ, обязательный к вводу;
C – любой символ, не обязательный к вводу;
A (или a) – буква либо цифра, не обязательная к вводу;
. – десятичный разделитель;
, – разделитель тысяч;
: – разделитель времени;
/ – разделитель даты;
$ – символ вылюты;
< – преобразование символов к нижнему регистру;
> – преобразование символов к верхнему регистру;
| – запрет на влияние элементов > или <.

63. Применение маски

• ввод символов ТОЛЬКО заданного типа (например,
только цифры);
• обеспечить обязательный ввод символов в поле
ввода;
• за счет ввода в маску специальных символовлитералов, которые будут составлять неотъемлемую
часть введенной строки, обеспечить ускорение ввода
информации для пользователя
(дефис в телефонном номере, точки в дате, знак валюты в цене и др.);
• задавать специальный ввод, когда будут
автоматически преобразованы, например, символы
нижнего регистра в верхний и т.д.

64. Механизм ввода по маске

• действительно вводимые символы заменяют
собой символы маски,
• постоянно заданные символы (например, точки в
дате) пропускаются, когда указатель ввода в
поле доходит до них,
• система просто передвигает указатель ввода на
следующий символ-подсказку.

65. Свойства MaskedTextBox

• PromptChar – предоставляет возможность
задавать свой собственный символ маски.
Вместо подчеркивания можно задать, например,
символ «*».
Тогда маска даты станет выглядеть так: **.**.****.
Это будет более наглядно, т.к. знак
подчеркивания сливается в сплошную линию.
• HidePromptOnLeave – предоставляет
возможность видеть символы-литералы даже в
то время, когда сам компонент теряет фокус
ввода.

66. Свойства MaskedTextBox

• MaskFull – позволяет проверить, все ли
требуемые символы маски введены.
• Text – строка, введена по маске.
• TextMaskFormat – определяет, как символылитералы и подсказка взаимодействуют, когда
генерируется форматная строка.
English     Русский Rules