организация диалога с пользователем

Содержание

Слайд 2

1. Button
Компонент Button (кнопка) предназначен для запуска некоторого действия, соответствующего тексту на

1. Button Компонент Button (кнопка) предназначен для запуска некоторого действия, соответствующего тексту
кнопке.
Главный элемент компонента – событие Click.

private void button1_Click(object sender, EventArgs e)
{
<код выполняемого действия>
}

Аргументы обработчика носят уведомительный характер (что случилось, для какого компонента).
Для получения большей информации следует использовать события мыши (MouseMove, MouseDown, MouseUp, MouseEnter, MouseLeave, MouseWheel, MouseHover – задержка мыши на компоненте) или события клавиатуры, которые возникают, если фокус находится на данном компоненте.

Слайд 3

Свойства компонента Button предназначены для его оформления.

Свойства компонента Button предназначены для его оформления.

Слайд 5

2. Label
Компонент Label (надпись) предназначен для отображения текста (одно- или многострочного) на

2. Label Компонент Label (надпись) предназначен для отображения текста (одно- или многострочного)
форме.
Содержание надписи задаётся свойством Text. Для оформления надписи можно использовать свойства Font, Location, Size, ForeColor, BackColor, TextAlign.
Специфические свойства:

Слайд 6

3. TextBox
Компонент TextBox (окно ввода текста) предназначен для отображения и изменения одно-

3. TextBox Компонент TextBox (окно ввода текста) предназначен для отображения и изменения
или многострочного текста на форме в отдельном прямоугольном окне.
Содержание текста определяется свойством Text. Для оформления окна набора текста можно использовать свойства Font, Location, Size, ForeColor, BackColor, TextAlign, BorderStyle.
При этом компонент имеет ряд специфических свойств:

Слайд 9

Методы компонента TextBox:

Методы компонента TextBox:

Слайд 10

События компонента TextBox.
Работают все стандартные события визуальных компонент.
Клавиатурные события используются для

События компонента TextBox. Работают все стандартные события визуальных компонент. Клавиатурные события используются
отслеживания нажимаемых клавиш клавиатуры при вводе текста.
Например, в следующем примере кода ввод символов в TextBox ограничен цифрами, запятой и клавишей :
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (((e.KeyChar < '0') || (e.KeyChar > '9'))
&& (e.KeyChar != ',') && (e.KeyChar != (char)(8) ))
e.KeyChar='\0';
}
Здесь все «неправильные» символы заменяются пустым символом (символом с кодом 0).

Слайд 11

Важным для компонента TextBox является событие TextChanged, которое генерируется при любом изменении

Важным для компонента TextBox является событие TextChanged, которое генерируется при любом изменении
текста в компоненте (независимо от того, происходит это пользователем или программно).
Параметры события имеют уведомительный характер, поэтому обработчик может только анализировать состояние текста, которое уже изменилось.
В примере показано изменение свойства ForeColor объекта TextBox. В примере текст преобразуется в десятичное число, а свойство  ForeColor изменяется на Color.Red, если число является отрицательным, и на Color.Green, если число положительное.
private void TextBox1_TextChanged(object sender, EventArgs e)
{
try
{ // текст приводится к типу double и проверяется на отрицательность.
if (double.Parse(textBox1.Text) < 0)
{ textBox1.ForeColor = Color.Red; }
else { textBox1.ForeColor = Color.Green; }
}
catch
{ // если в тексте есть ошибка, то используется системный цвет
textBox1.ForeColor = SystemColors.ControlText;
}
}

Слайд 12

7. Пример расчётной задачи.

Пусть требуется написать программу для расчёта суммы вклада, если

7. Пример расчётной задачи. Пусть требуется написать программу для расчёта суммы вклада,
известны:
Начальная сумма вклада
Процент вклада
Срок вклада

Слайд 13

Решение
Расположим на форме следующие компоненты:
Четыре компонента Label, три из которых будут

Решение Расположим на форме следующие компоненты: Четыре компонента Label, три из которых
отвечать за пояснения к исходным данным, а четвёртый label4 – за вывод результатов расчёта.
Три компонента TextBox, отвечающие за ввод исходных значений (по порядку).
Один компонент Button, запускающий процедуру расчёта итоговой суммы вклада.

Настроим компоненты так, как показано на рисунке, установив шрифт для всех в состояние Bold.
У компонента label4 увеличим шрифт и изменим цвет символов ForeColor.
У button1 установим в значение false свойство Enabled.

Слайд 14

Реализуем обработку ввода исходных данных.
Для компонентов textBox1, textBox2 и textBox3 запишем единый

Реализуем обработку ввода исходных данных. Для компонентов textBox1, textBox2 и textBox3 запишем
обработчик события KeyPress (нажатие символьной клавиши):
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar >= '0') && (e.KeyChar <= '9')) return;
if (e.KeyChar == (char)8) return;
if (e.KeyChar == '.') e.KeyChar = ',';
...
Здесь первой командой пропускаются (разрешаются) символы – цифры.
Второй командой разрешается символ с кодом 8 – (забой ).
Третьей командой символ <точка> (английский десятичный разделитель) заменяется на символ <запятая> (как принято в России).

Слайд 15

Далее:
...
if (e.KeyChar == ',')
{
if ((((TextBox)sender).Text.IndexOf(',') != -1)

Далее: ... if (e.KeyChar == ',') { if ((((TextBox)sender).Text.IndexOf(',') != -1) ||
|| (((TextBox)sender).Text.Length == 0)) e.Handled = true;
return;
}
...
Если введён десятичный разделитель – символ <запятая>, то в случае присутствия в TextBox ещё одной запятой, или если TextBox пустой, то ввод символа отменяется.
Обратите внимание, что данный обработчик – общий для всех трёх окошек ввода данных. Поэтому, чтобы обратиться к тому компоненту, который был в фокусе, использован параметр sender, a чтобы получить доступ к его свойствам, использовано приведение типа (TextBox)sender.

Слайд 16

Далее:
...
if (e.KeyChar == (char)Keys.Enter)
{
if (sender.Equals(textBox1)) textBox2.Focus();
if (sender.Equals(textBox2))

Далее: ... if (e.KeyChar == (char)Keys.Enter) { if (sender.Equals(textBox1)) textBox2.Focus(); if (sender.Equals(textBox2))
textBox3.Focus();
if (sender.Equals(textBox3)) button1.Focus();
}
e.Handled = true;
}
Если была нажата клавиша , то фокус перемещается на следующий компонент: с textBox1 на textBox2, с textBox2 на textBox3, с textBox3 на button1 – кнопку «Вычислить».
В конце обработчика введённый символ аннулируется. Поэтому, для обработки операционной системой останутся те символы, которые были пропущены ранее (return – принудительное завершение функции).

Слайд 17

Реализуем обработку события – изменение полей ввода исходных данных.
Для компонентов textBox1, textBox2

Реализуем обработку события – изменение полей ввода исходных данных. Для компонентов textBox1,
и textBox3 запишем единый обработчик события TextChanged (изменение текста):
private void textBox3_TextChanged(object sender, EventArgs e)
{
label4.Text = "";
if ((textBox1.Text == "") || (textBox2.Text == "")
|| (textBox3.Text == ""))
button1.Enabled = false;
else button1.Enabled = true;
}
Здесь вначале очищается поле вывода результатов label4.
Затем, в случае, когда хотя бы одно из полей ввода исходных данных пусто, кнопка «Вычислить» отключается. Иначе – она вполне работоспособна.

Слайд 18

Реализуем главное действие программы – нажатие кнопки «Вычислить».
Для компонента button1 запишем обработчик

Реализуем главное действие программы – нажатие кнопки «Вычислить». Для компонента button1 запишем
события Click (нажатие на кнопку, происходит при щелчке мышкой или клавишей , когда эта кнопка находится в фокусе):
private void button1_Click(object sender, EventArgs e)
{
double start = Convert.ToDouble(textBox1.Text);
double proc = Convert.ToDouble(textBox2.Text);
double srok = Convert.ToDouble(textBox3.Text);
double fin = start * Math.Pow(1 + proc/100, srok);
label4.Text = "Итого на счёте "+fin.ToString("C");
}
Здесь локальным переменным start, proc, srok присвоены числовые значения исходных данных, введённые в текстовом формате.
Локальной переменной fin присвоено значение результата. При этом использована функция Pow из класса Math, вычисляющая степень числа.
Для вывода ответа значение переменной fin преобразовано в текстовый вид с использованием формата денежных единиц (параметр "C").

Слайд 19

8. Сохранение строк в текстовом файле.

Файловый ввод вывод данных в C# организуется

8. Сохранение строк в текстовом файле. Файловый ввод вывод данных в C#
через потоки – механизм Windows, формирующий наборы данных произвольной длины, для которых реализованы функции добавления и извлечения данных.
Файл рассматривается как поток данных, оформленный на внешнем носителе информации.
Для доступа к файлу следует создать переменную класса FileStream, связав её с конкретным файлом, например, так:
FileStream fs = new FileStream(<имя файла>, <режим>);
Здесь <имя файла> – полное или краткое имя файла,
<режим> – способ открытия файла. Имеет варианты: Create – файл создаётся заново Append – файл открывается для дозаписи Open – файл открывается, режим доступа FileAccess (третий параметр конструктора FileStream().

Слайд 20

Для записи в файл используется объект класса StreamWriter, при создании которого указывается

Для записи в файл используется объект класса StreamWriter, при создании которого указывается
соответствующий файловый поток:
StreamWriter sw = new StreamWriter(<файловый поток>);
Данный объект представляет группу методов, обслуживающих запись в файл:

Классы FileStream и StreamWriter описаны в пространстве имён System.IO, которое необходимо предварительно заказать: using System.IO;

Слайд 21

Пример.
Записываем в текстовый файл “a.txt” введённое число и его удвоенное значение. Каждый

Пример. Записываем в текстовый файл “a.txt” введённое число и его удвоенное значение.
вывод предваряется информацией о текущих дате и времени:
--------------------------------------------- Hello world this is 25.10.2011 22:10:43 Текущее = 12 Квадрат = 144
Форма для ввода данных имеет вид:

Слайд 22

Обработчик события Click для Button:
private void button3_Click(object sender, EventArgs e)
{
FileStream fs;

Обработчик события Click для Button: private void button3_Click(object sender, EventArgs e) {
DateTime dt = DateTime.Now;
string s1 = dt.ToShortDateString();
string s2 = dt.ToLongTimeString();
try
{ fs = new FileStream("a.txt", FileMode.Append); }
catch
{ fs = new FileStream("a.txt", FileMode.Create); }
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("---------------------------------------");
sw.WriteLine("Hello world");
sw.WriteLine("this is " + s1 + " " + s2);
...

Слайд 23

...
try
{
int a1 = Convert.ToInt32(textBox1.Text);
int a2 = a1

... try { int a1 = Convert.ToInt32(textBox1.Text); int a2 = a1 *
* a1;
sw.WriteLine("Текущее = " + a1.ToString());
sw.WriteLine("Квадрат = " + a2.ToString());
}
catch
{
sw.WriteLine("Текущее = " + textBox1.Text);
sw.WriteLine("Ошибка исходных данных");
}
sw.WriteLine();
sw.Close();
}
Предварительно заказано
using System.IO;
Имя файла: организация-диалога-с-пользователем.pptx
Количество просмотров: 48
Количество скачиваний: 0