Решение. Приложение “Калькулятор”

Лабораторная работа № 11.

Приложение “Калькулятор”

Упражнение 11.1. Напишите программу “Калькулятор”, выполняющую арифметические действия над целыми и вещественными числами.

Решение

Создайте новый проект Calculator.

1-й этап: визуальное проектирование. Измените заголовок формы на “Калькулятор”, а значение свойства Name – на CalculatorForm.

Поместите на форму компонент TextBox. Расположите его так, как показано на рис. 11.1. Установите следующие значения его свойств:

Свойство Значение
Enabled False, чтобы предотвратить ввод символов с клавиатуры
Name NumberTextBox
TextAlign Right

Поместите на форму компонент Panel, который предназначен для объединения нескольких компонентов в группу. Установите значение свойства BorderStyle – в Fixed3d.

Поместите на панель 5 компонентов Button. Выделите (с помощью клавиши Shift) все 5 кнопок и в окне свойств Properties задайте размер кнопок следующим образом:

Свойство Значение
Size.Width  
Size.Height  

Расположите кнопку Button1 в левом верхнем углу панели, а кнопку Button5 в правом верхнем. Далее для того чтобы выровнять кнопки относительно друг друга выполните следующую последовательность действий:

· выделите все 5 кнопок,

· выполните команду меню FormatAlign. Установите выравнивание по верхней границе Tops,

· выполните команду FormatHorizontal Spacing. Установите значение Make Equal для того, чтобы расположить кнопки на одинаковом расстоянии друг от друга.

Скопируйте выделенные пять кнопок в буфер обмена, выполнив команду Edit – Copy. На Panel1 поместите еще пять кнопок, для этого выделите компонент Panel1 (чтобы показать объект, на который будем помещать кнопки из буфера) и выполните команду Edit – Paste (вставка из буфера обмена). Не снимая выделения, разместите эти кнопки, как показано на рис. 11.1.

Поместите в нижнюю часть формы еще один компонент Panel. Разместите на нем восемь компонентов Button и измените их свойства Text и Name в соответствии с таблицей:

Text Name
0 ZeroButton
1 OneButton
2 TwoButton
3 ThreeButton
4 FourButton
5 FiveButton
6 SixButton
7 SevenButton
8 EightButton
9 NineButton
+ AddButton
SubtractButton
* MultiplyButton
/ DivButton
, PointButton
= EqualButton
C CancelButton
Backspace BackSpaceButton

Измените размер шрифта кнопок. Для этого выделите все кнопки и измените значение свойства Font.Size на 15.

Итак, визуальное проектирование калькулятора закончено.

2-й этап. Создание программного кода.

При нажатии на кнопки калькулятора “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9” формируется число – к содержимому окна редактирования справа добавляется цифра, отображенная на кнопке. Создадим обработчик события Click кнопки ZeroButton:

private void ZeroButton_Click(object sender, EventArgs e)

{

NumberTextBox.Text = NumberTextBox.Text+ ZeroButton.Text;

}

При щелчке по любой из оставшихся 9 кнопок должно происходить то же самое действие. Обобщим описанный выше обработчик события, изменим код на:

private void ZeroButton_Click(object sender, EventArgs e)

{

NumberTextBox.Text = NumberTextBox.Text+(sender as Button).Text;

}

Напомним, что параметр sender представляет объект, который получил сообщение, например, при нажатии на кнопку “0” параметр sender, несмотря на указанный в заголовке класс object, является ссылкой на объект ZeroButton класса Button. Оператор as используется для приведения объектных типов, т.е. параметр sender (который принадлежал классу object) будет преобразован к типу Button. Поэтому при щелчке по кнопке ZeroButton значение ZeroButton. Text первого варианта обработчика совпадает со значением (sender as Button).Text второго вариант обработчика.

Таким образом, если после щелчка по кнопке OneButton обратиться к методу-обработчику события, то значение (sender as Button).Text будет равняться “1”.

Чтобы связать этот обработчик события с обработкой события Click компонента OneButton, необходимо в окне свойств Properties на странице событий компонента OneButton в правой колонке события Click из списка методов-обработчиков событий события Click выбрать ZeroButton_Click (рис. 11.2).

Выполните аналогичные действия для каждой из оставшихся восьми кнопок.

Запустите приложение. Убедитесь, что при щелчке по кнопкам формируется число.

При нажатии на кнопки “+”, “–“, “*”, “/” необходимо запомнить первый операнд арифметического выражения и знак операции. Для этого введем переменную operand1 вещественного типа для хранения значения первого операнда вычисляемого выражения и переменную Op строкового типа для хранения знака арифметической операции следующим образом:

public partial class CalculatorForm: Form

{

private double operand1;

private string Op;

}

Тогда обработчик события Click компонента AddButton будет выглядеть так:

private void AddButton_Click(object sender, EventArgs e)

{

operand1 = double.Parse(NumberTextBox.Text); //сохраняем значение числа в переменной operand1

NumberTextBox.Text = ""; //очищаем содержимое окна ввода

Op = (sender as Button).Text; //сохраняем значение арифметической операции в переменной Op

}

Метод Parse класса double преобразует строковое представление числа в эквивалентное ему число двойной точности с плавающей запятой.

Свяжите данный обработчик события с обработчиками событий Click оставшихся четырех знаков действий.

При добавлении запятой к записи числа в строке редактирования необходимо учитывать следующие особенности. Во-первых, символ “,” может встречаться в записи числа только один раз. Кроме того, если пользователь нажал на кнопку “,”, а окно редактирования пусто, то к записи числа перед запятой должен добавляться ноль. Отсюда, обработчик события нажатия на кнопку “,” будет иметь вид:

private void PointButton_Click(object sender, EventArgs e)

{

if (!NumberTextBox.Text.Contains(','))//если в записи числа еще нет символа ','

if (NumberTextBox.Text == "") NumberTextBox.Text = NumberTextBox.Text + "0,";

// если число не сформировано добавляем перед запятой ноль

else NumberTextBox.Text = NumberTextBox.Text + ",";

//иначе добавляем ',' к записи числа

}

При нажатии на кнопку “=” вычисляется результат арифметической операции:

private void EqualButton_Click(object sender, EventArgs e)

{

double Result = 0;

double operand2 = double.Parse(NumberTextBox.Text); //сохраняем значение второго операнда в переменной operand2

switch (Op) // в зависимости от значения переменной Op вычисляем значение арифметического выражения

{

case "+": Result = operand1 + operand2; break;

case "-": Result = operand1 - operand2; break;

case "*": Result = operand1 * operand2; break;

case "/": Result = operand1 / operand2; break;

}

NumberTextBox.Text = Result.ToString();

}

При нажатии на клавишу “ C ” окно ввода очищается:

private void CancelButton_Click(object sender, EventArgs e)

{

NumberTex.Text = "";

}

Запустите приложение. Убедитесь в правильности работы калькулятора.

Модифицируем программу так, чтобы пользователь имел возможность ввода числа с клавиатуры.

Рассмотрим, как приложение обрабатывает события клавиатуры. В Windows используется фокус ввода для того, чтобы определить, куда посылать события клавиатуры. Выбранный в данный момент компонент (активный компонент) всегда обладает фокусом ввода (рис. 11.3), и именно он принимает все события клавиатуры.

 
 

Для того чтобы послать события клавиатуры сначала форме (рис. 11.4), а потом активному компоненту, установите свойство формы KeyPreview равным True. Это может пригодиться для того, чтобы
 
 

обезопасить пользователя от введения ошибочных символов (например, от введения букв).

Итак, установите значение свойства KeyPreview формы равным True, создайте обработчик события KeyPress формы:

private void CalculatorForm_KeyPress(object sender, KeyPressEventArgs e)

{

if (char.IsDigit(e.KeyChar))

NumberTextBox.Text=NumberTextBox.Text+e.KeyChar;

}

Метод KeyChar класса KeyPressEventArg задает символ, соответствующий нажатой клавише. Метод IsDigit класса char показывает, относится ли символ Юникода к категории десятичных цифр.

Запустите приложение. Убедитесь, в правильности работы калькулятора.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: