Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.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 Application С# из панели 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, так должна выглядеть форма после программирования этой задачи.