Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.01.2024

Просмотров: 922

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Using System.Windows.Forms;

// Другие директивы using удалены, поскольку они не используются

// в данной программе
namespace Visible

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

base.Text = "Житейская мудрость";

label1.Text = "Сколько ребенка не учи хорошим манерам,\n" +

"он будет поступать так, как папа с мамой";

Label1.TextAlign = ContentAlignment.MiddleCenter;

button1.Text = "Кнопка";

toolTip1.SetToolTip(button1, "Кнопка\r\nсчастья");

// Должна ли всплывающая подсказка использовать всплывающее окно:

toolTip1.isBalloon = true;

// Если IsBalloon = false, то используется стандартное

// прямоугольное окно

}

private void button1_Click(object sender, EventArgs e)

{ // Обработка события "щелчок на кнопке".

// Можно программировать так:

// if (label1.Visible == true) label1.Visible = false;

// else label1.Visible = true;

// или так:

// label1.Visible = label1.Visible ^ true;

// здесь ^ - логическое исключающее ИЛИ,

// или совсем просто:

Label1.Visible = !label1.Visible;

}

}

}

Сразу после вызова процедуры InitializeComponent свойству Text метки при­сваиваем некоторый текст, "склеивая" его с помощью знака "плюс" (+) из отдель­ных фрагментов. Использование в текстовой строке символов "\n" (или "\r\n") означает перенос текста на новую строку (это так называемый перевод каретки). Можно переводить каретку с помощью строки Environment.NewLine. В перечисле­нии Environment можно выбрать и другие управляющие символы. Свойство метки TextAlign располагает текст метки по центру и посередине (MiddleCenter). Выражение, содержащее ToolTip1, устанавливает (set) текст всплывающей подсказки для кнопки button1 при "зависании" над ней указателя мыши (рис. 1.14). По умол­чанию свойство isBalloon пребывает в состоянии false, и при этом во всплываю­щей подсказке используется стандартное прямоугольное окно, установка isBalloon = true переводит подсказку в стиль комиксов (в стиль Balloon), см. рис. 1.14.

Чтобы в программном коде получить пустой обработчик события "щелчок мышью на кнопке", следует в дизайнере (конструкторе) формы (т. е. на вкладке Form1.cs[Designer]) дважды щелкнуть на кнопке button1. При обработке этого события, как видно, закомментированы пять строчек, в которых записана логика включения видимости метки или ее выключение. Логика абсолютно понятна: если свойство видимости (visible) включено (true), то его следует выключить (false); иначе (else) — включить.



Рис. 1.14. Фрагмент работы программы


Несколько путано, но разобраться можно. И все работает. Проверьте! Кнопку можно нажимать мышью, клавишей <Enter> и клавишей <Пробел>.

Однако можно пойти другим путем. Именно поэтому пять строчек этой слож­ной логики переведены в комментарий. Мы уже встречались с побитовым операто­ром ^(исключающее ИЛИ). Напоминаю, что этот оператор, говоря кратко, выбира­ет "да" (true), сравнивая "нет" и "да", и выбирает "нет" (false), сравнивая "да" и "да". Однако можно еще более упростить написание программного кода: label1.visible = ! label1.Visible;

To есть при очередной передаче управления на эту строчку свойство label1.visible будет принимать противоположное значение. Вы убедились, что можно по-разному программировать подобные ситуации.

Как видно, мы использовали много закомментированных строчек программно­го кода. Очень удобно комментировать строки программного кода в редакторе Visual Studio, вначале выделяя их, а затем использовать комбинацию клавиш

<Ctrl>+<K> | <С> (Comment). Чтобы убрать с нескольких строк знак комментария, можно аналогично вначале отметить их, а затем пользоваться уже дугой комбина­цией клавиш <Ctrl>+<K> | <U> (Uncomment).

Текст программы можно посмотреть, открыв решение Visible.sln в папке Visible.

Пример 9. Калькулятор на основе комбинированного списка ComboBox

Элемент управления ComboBox служит для отображения вариантов выбора в выпадающем списке. Продемонстрируем работу этого элемента управления на примере программы, реализующей функции калькулятора. Здесь для отображения вариантов выбора арифметических операций используется комбинированный спи­сок ComboBox.

После запуска Visual Studio 2010 и выбора шаблона Windows Forms Applica­tion С# из панели Toolbox перетащим в форму два текстовых поля TextBox, метку Label и комбинированный список ComboBox.

Текст программы представлен в листинге 1.8.

Листинг 1.8. Суперкалькулятор

// Программа, реализующая функции калькулятора. Здесь для отображения

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

// список ComboBox using System;

using System.Windows.Forms;

// Другие директивы using удалены, поскольку они не используются

// в данной программе
namespace ComboBox_Calc

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

comboBox1.Text = "Выбери операцию";

comboBox1.Items.AddRange(new string[] {"Прибавить",



"Отнять", "Умножить", "Разделить", "Очистить"});
comboBox1.Tablndex = 2;
textBox1.Clear(); textBox2.Clear();
textBox1.Tablndex = 0; textBox2.Tablndex = 1;
this.Text = "Суперкалькулятор";
label1.Text = "Равно: ";

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

// Обработка события изменения индекса выбранного элемента

label1.Text = "Равно: ";

// Преобразование из строковой переменной в Single:

Single X, Y, Z = 0;

bool Число_ли1 = single.TryParse(textBox1.Text, Systern.Globalization.NumberStyles.Number,

System.Globalization.NumberFormatlnfo.Currentlnfo, out X);

bool Число_ли2 = Single.TryParse(textBox2.Text, System.Globalization.NumberStyles.Number,

System.Globalization.NumberFormatlnfo.Currentlnfo, out Y) ;

if (Число_ли1 == false || Число_ли2 == false)

{

MessageBox.Show("Следует вводить числа!", "Ошибка",

MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

// Оператор множественного выбора:

switch (comboBox1.Selectedlndex)

// Выбор арифметической операции:

case 0: // Выбрали "Прибавить":

Z = X + Y; break;

case 1: // Выбрали "Отнять":

Z = X - Y; break;

case 2: // Выбрали "Умножить":

Z = X * Y; break;

case 3: // Выбрали "Разделить":

Z = X / Y; break;

case 4: // Выбрали "Очистить":

textBoxl.Clear(); textBox2.Clear();

label1.Text = "Равно: "; return;

}

Label1.Text = string.Format("Равно {0:F5}", Z) ;

}

}

}

В данной программе сразу после вызова процедуры InitializeComponent при­сваиваем начальные значения некоторым свойствам, в том числе задаем коллекцию элементов комбинированного списка: "Прибавить", "Отнять" и т. д. Здесь также задаем табличные индексы Tabindex для текстовых полей и комбинированного списка. Табличный индекс определяет порядок обхода элементов. Так, при старте программы фокус будет находиться в первом текстовом поле, поскольку мы назначили textBox1. Tablndex = 0. Далее при нажатии пользователем клавиши <ТаЬ> будет происходить переход от элемента к элементу соответственно табличным индексам (рис. 1.15).



Рис. 1.15. Переход от одного текстового поля к другому

При обработке события "изменение индекса выбранного элемента" comboBox1_SelectedIndexChanged помощью функции TryParse проверяем, можно ли текстовые поля преобразовать в число. Первым параметром метода TryParse является анализируемое поле. Второй параметр — это разрешаемый для преобра­зования стиль числа, в данном случае типа Number, т. е. десятичное число, которое имеет целую и дробную части. Третий параметр указывает, на какой основе фор­мируется допустимый формат, в нашем случае мы использовали CurrentInfо, т. е. на основе текущего языка и региональных параметров. По умолчанию при инстал­ляции руссифицированной версии
Windows разделителем целой и дробной частей числа является запятая. Однако эту установку можно изменить, если в Панели управления выбрать значок Язык и региональные стандарты, а затем на вкладке Региональные параметры щелкнуть на кнопке Настройка и на появившейся но­вой вкладке указать в качестве разделителя целой и дробной частей точку вместо запятой. В обоих случаях (и для запятой, и для точки) метод TryParse будет рабо­тать так, как указано на вкладке Региональные параметры.

Четвертый параметр метода TryParse возвращает результат преобразования. Кроме того, функция TryParse возвращает булеву переменную true или false, ко­торая сообщает, успешно ли выполнено преобразование. Как видно из текста про­граммы, если хотя бы одно поле невозможно преобразовать в число, то програм­мируем сообщение "Следует вводить числа!" и выход из процедуры обработки события с помощью оператора return.

Далее оператор switch осуществляет множественный выбор арифметической операции в зависимости от индекса выбранного элемента списка selectedindex. Оператор switch передает управление той или иной "метке case". Причем, как го­ворят программисты, оператор множественного выбора в С-подобных языках в от­личие от других языков, например Basic, "проваливается", т. е. управление перехо­дит на следующую метку case, поэтому приходится использовать оператор break для выхода из switch.

Последний оператор в процедуре осуществляет формирование строки с помо­рю метода string.Format для вывода ее на метку label1. Формат " {0:F5}" озна­чает, что значение переменной z следует выводить по фиксированному формату с „пятью знаками после запятой (или точки). Заметьте, в этом примере даже не при­шлось программировать событие деления на ноль. Система Visual Studio сделала это за нас (см. рис. 1.15).

Убедиться в работоспособности программы можно, открыв решение ComboBox_Calc.sln в папке ComboBox_Calc.

Пример 10. Вывод греческих букв, символов математических операторов. Кодовая таблица Unicode

Немного ликбеза. Хранение текстовых данных в памяти ЭВМ предполагает кодирование символов по какому-либо принципу. Таких кодировок несколько. Каж­дой кодировке соответствует своя таблица символов. В этой таблице каждой ячей­ке соответствуют номер в таблице и символ. Мы упомянем такие кодовые таблицы: ASCII, ANSI Cyrillic (другое название этой таблицы— Windows 1251), а также Unicode
.

Первые две таблицы являются однобайтовыми, т. е. каждому символу соответ­ствует 1 байт данных. Поскольку в 1 байте — 8 битов, байт может принимать 28 = 256 различных состояний, этим состояниям можно поставить в соответствие 256 разных символов. Так, в таблице ASCII от 0 до 127 — базовая таблица — есть английские буквы, цифры, знаки препинания, управляющие символы. От 128 до 255 — это расширенная таблица, в ней находятся русские буквы и символы псев­дографики. Некоторые из этих символов соответствуют клавишам IBM-совмести­мых компьютеров. Еще эту таблицу называют "ДОСовской" по имени операцион­ной системы MS-DOS, где она применяется. Эта кодировка используется также в Интернете.

В операционной системе Windows используется преимущественно ANSI (Windows 1251). Базовые символы с кодами от 0 до 127 в этих таблицах совпадают, а расширенные — нет. То есть русские буквы в этих таблицах находятся в разных местах таблицы. Из-за этого бывают недоразумения. В ANSI нет символов псевдо­графики. ANSI Cyrillic — другое название кодовой таблицы Windows 1251.

Существует также двухбайтовый стандарт Unicode. Здесь один символ кодиру­ется двумя байтами. Размер такой таблицы кодирования — 216 = 65 536 ячеек. Ко­довая таблица Unicode включает в себя практически все современные письменно­сти. Разве что здесь нет старославянских букв. Когда в текстовом редакторе MS Word мы выполняем команду Вставка | Символ, то вставляем символ из таб­лицы Unicode. Также в Блокноте можно сохранять файлы в кодировке Unicode: Сохранить как | Кодировка Юникод. В этом случае в Блокноте будут, например, греческие буквы, математические операторы ∏, ∆, ∑ и проч. Кстати, греческая буква Σ и математический оператор занимают разные ячейки в Unicode. Размер файла при сохранении в Блокноте будет ровно в два раза большим.

Напишем программу, которая приглашает пользователя ввести радиус R, чтобы вычислить длину окружности. При программировании этой задачи длину окружно­сти в метке Label назовем греческой буквой β, приведем формулу для вычислений с греческой буквой π = 3,14. Результат вычислений выведем в диалоговое окно MessageBox также с греческой буквой.

После традиционного запуска Visual Studio 2010 и выбора шаблона Windows Forms Application С# перетащим в форму две метки Label, текстовое поле TextBox и командную кнопку Button. Посмотрите на рис. 1.16, так должна выглядеть форма после программирования этой задачи.