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

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

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

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

Добавлен: 11.01.2024

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
регулярного выражения. Как видно, мы начали регулярное выражение с символа ^ и закончили символом $. Символы ^ и $ соответствуют началу и концу строки соответственно. Этo побуждает регулярное выражение оценивать всю строку, а не возвращать соответствие, если успешно совпадает подстрока.

Далее в первых квадратных скобках указан диапазон допустимых букв для установления соответствия первой буквы фамилии. Первая буква должна быть прописной, т. е. верхнего регистра, в диапазоне алфавита (и таблицы символов) от А до И, от К до Щ и от Э до Я, т. е. недопустим ввод букв Й, Ъ, Ы, Ь в качестве первой буквы фамилии. Далее в следующих квадратных скобках указан диапазон букв либо нижнего, либо верхнего регистров, причем символ * означает, что второй диапазон символов может встретиться в строке ноль или более раз. Фрагмент работы программы представлен на рис. 12.1.

Вторая задача, которую мы рассмотрим в данном примере, — это проверь правильности ввода положительного рационального числа. Следует допустить возможность ввода любых вариантов, например "2010", "2.9", "5.", ".777". То есть допустим ввод цифровых символов и точки (или запятой).



Рис. 12.1. Проверка корректности ввода фамилии на русском языке

Пользовательский интерфейс для решения данной задачи такой же, как и для предыдущей, поэтому сразу приведу программный код решения (листинг 12.2).

Листинг 12.2. Проверка вводимого числа с помощью регулярных выражений

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

// введенной пользователем текстовой строки на соответствие ее положительному рациональному числу.

Using System;

Using System.Windows.Forms;

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

namesрасе ПроверкаЧисла

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

Label1.Text = "Введите положительное рациональное число:";

Button1.Text = "Проверка";

}

private void button1_Click(object sender, EventArgs e)

{
textBox1.Text = textBox1.Text.Trim();

if (System.Text.RegularExpressions.Regex.Match(textBox1.Text,

"^(([0-91 + .[0-9]*) I ([0-9]*.[0-9]+) I ([0-9]+))$" ).Success == false) MessageBox.Show("Некорректный ввод", "Ошибка");

}

}

}

Данная программа построена аналогично предыдущей, в комментарии нуждается шаблон


"^М ( [0-9] + .[0-9]*) | ( [0-9]*.[0-9]+) | ( [0-9]+))$"

Здесь между символами |, означающими логическое ИЛИ, между круглыми скобками представлены три группы выражений. Первая группа допускает ввод цифровых символов от 0 до 9 до десятичной точки. Знак "плюс" (+) означает, что цифровой символ может встретиться в строке один или более раз. Символ * означает, что цифровой символ может встретиться в строке ноль или более раз. Таким образом, первая группа допускает ввод, например, рационального числа 6.. Аналогично работает вторая группа выражений, она допускает ввод, например, числа .77. Третья группа— это совсем просто: она проверяет соответствие с любыми целыми числами.

Убедиться в работоспособности программ, рассмотренных в данном примере можно, открыв решение ПроверкаФамилии.sln в папке ПроверкаФамилии и ПроверкаЧисла.sIn в папке ПроверкаЧисла.

Пример 85. Управление прозрачностью формы

Создадим программу, которая демонстрирует стандартное Windows-окно, т. е. стандартную форму. Щелчок мышью в пределах этой формы начинает постепен­ный процесс исчезновения формы, форма становится все более прозрачной, а затем исчезает вовсе, далее она постепенно проявляется снова, и т. д. Еще один щелчок в пределах формы останавливает этот процесс, а следующий щелчок процесс возоб­новляет и т. д.

Для написания этой программы добавим в стандартную форму из панели элементов управления Toolbox объект Timer (Таймер). Этот невидимый во время ра­боты программы элемент управления предназначен для периодического генериро­вания события Tick, которое происходит, когда таймер работает и прошел заданный интервал времени. Этот интервал времени timer1.interval по умолча­нию равен 100 миллисекунд, его в нашей программе мы изменять не будем.

Управлять прозрачностью формы можно с помощью свойства формы Opacity, задавая уровень непрозрачности от нуля до единицы. Текст программы приведен в листинге 12.3.

Листинг 12.3. Управление прозрачностью формы

// Программа демонстрирует стандартную форму. Щелчок мышью в пределах этой формы начинает постепенный

//процесс исчезновения формы: форма становится все более прозрачной, а затем исчезает вовсе. Далее она

//постепенно проявляется снова, и т. д. Еще один щелчок в пределах формы останавливает этот процесс, а

// следующий щелчок процесс возобновляет и т.

using System;

using System. Windows . Forms ;

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



//namespace Opacity

{

public partial class Form1 : Form

{

double s = 0.1;

public Form1()

{

InitializeComponent();

// Timerl.Interval() = 400

}

private void timer1_Tick(object sender, EventArgs e)

{

if (this.Opacity <= 0 || this.Opacity >= 1) s = -s;

this.Opacity += s;

}

private void Form1_Click(object sender, EventArgs e)

{ timerl.Enabled = !timerl.Enabled; }

}

}

Как видно, здесь при обработке события "щелчок в пределах формы" запуска­ется таймер, а еще один щелчок мышью его останавливает. Каждые 100 миллисе­кунд появляется событие timeri_click. Обрабатывая его, мы меняем значение непрозрачности Opacity от нуля до единицы с шагом 0.1, который задаем через внешнюю переменную s.

Этот пример на языке Visual Basic приведен на сайте p://subscribe.ru/archive/comp.soft.prog.visualbnet/200512/16181816.html, автор переписал его на С#. Текст этой программы можно посмотреть, открыв решение Opacity.sln в папке Opacity.

Пример 86. Время по Гринвичу в полупрозрачной форме

Время, дату, день недели очень легко выяснить, посмотрев в правый нижний угол рабочего стола Windows. Однако, если, например, вы читаете новости, которые поступают в реальном времени, где время публикаций указывают по Гринвичу (GMTGreenwich Meridian Time), это могут быть, например, новости валютного рынка или фондового рынка Форекс или другой экономический календарь, то в этом случае важно знать, насколько актуальна, свежа новость. Конечно, можно держать в голове, что московское время отличается от времени по Гринвичу на 4 часа, а время по Киеву — на 3 часа, а затем мучительно соображать, необходимо прибавить эти 3 часа к киевскому времени или, наоборот, отнять.

Кроме того, следует помнить, что время по Гринвичу не переводится на летние и зимние часы. Поэтому, чтобы выяснить правильное время по Гринвичу, можно на стандартном рабочем столе Windows справа внизу двойным щелчком на отображении текущего местного времени на вкладке Часовой пояс выбрать Время по Гринвичу и сбросить флажок Автоматический переход на летнее время и обратно. При этом очень удобно для сравнения времени иметь перед глазами caйт www.central-european-time.com, где показано текущее местное время, среднеевропейское (или центральноевропейское время, Central European Time (СЕТ)) и время по Гринвичу.

Предлагаю написать маленькую программу, которая в полупрозрачной экранной форме отображает текущее время по Гринвичу. То есть мы напишем nporpaмму, которая будет демонстрировать текущее время по Гринвичу и при этом, в силу своей прозрачности, не будет заслонять другие приложения.


Для решения этой задачи создадим форму и перетащим в нее из панели элементов управления Toolbox метку Label и объект Timer. Этот объект позволит обрабатывать событие timer1.Tick через периодически заданные интервалы времени. Далее на вкладке визуального проекта программы Form1.cs [Design] растянем мышью форму и расположим метку примерно так, как показано на рис. 12.2.



Рис. 12.2. Фрагмент работы программы определения времени no Гринвичу

Код данной программы представлен в листинге 12.4.

Листинг 12.4. Время по Гринвичу в полупрозрачной форме

// Программа в полупрозрачной экранной форме отображает текущее время

//по Гринвичу. Таким образом, программа демонстрирует текущее время

// по Гринвичу и при этом не заслоняет собой другие приложения.

using System;

using System. Drawing;

using System.Windows.Forms;

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

namespace Гринвич

{

public partial class Form1: Form

{

bool t = false;

public Form1()

{

InitializeComponent();

base.Text = "ВРЕМЯ ПО ГРИНВИЧУ:";

base.Opacity =0.75; // Уровень непрозрачности формы

label1.Font = new Font("Courier New", 18.0F);

label1.Text = string.Empty;

timer1.Interval = 1000; // 1000 миллисекунд = 1 секунда

timer1.Start();

}

private void timer1_Tick(object sender, EventArgs e)

{//Обработка события, когда прошел заданный интервал

// времени: 1000 миллисекунд = 1 секунда

Label1.Text = "ВРЕМЯ ПО ГРИНВИЧУ: ";

string время;

t = !t; // То же, что и t = true^t;

if (t == true) время = string.Format("{0:t}", DateTime.UtcNow);

else время = string.Format("{0} {1:00}", DateTime.UtcNow.Hour,DateTime.UtcNow.Minute);

label1.Text = label1.Text + время;

}

private void Form1_MouseLeave(object sender, EventArgs e)

{ // Указатель мыши выходит за пределы формы

base.Opacity = 0.75;

}

private void label1_MouseEnter(object sender, EventArgs e)

{ // Указатель мыши входит в область метки

base.Opacity = 1;

}

}

}

Здесь сразу после выполнения процедуры InitializeComponent задаем текст "ВРЕМЯ ПО ГРИНВИЧУ:" в заголовке формы (свойство base.Text), указываем уровень непрозрачности формы basepacity = 0.75. Если Оpacity = 0, то изображение формы совсем пропадает, программа будет благополучно работать в опе­ративной памяти, и мы будем догадываться о ее работе только потому, что она будет напоминать о своем существовании в свернутом виде в панели задач. При Оpacity = 1 будем иметь обычное непрозрачное изображение формы.

Далее включаем таймер timer1.Start () и задаем интервал работы таймера
timer1.Interval = 1000 (1000 миллисекунд, т. е. 1 секунда). Это означает, что через каждую секунду мы имеем возможность обрабатывать событие "прошла одна секунда" timer1.Tick.

Справиться с задачей демонстрации времени было бы очень легко, если бы намнадо было просто отображать текущее время. Мы бы написали: время = string.Format("{0:t}", DateTime. Now)

Однако по условию задачи нам нужно показывать время по Гринвичу. Система Visual Studio 2010 имеет свойство utcNow пространства имен System.DateTime. Это свойство возвращает так называемое универсальное координированное время (Universal Coordinated Time, UTC), которое с точностью до долей секунды совпадаете временем по Гринвичу. Поэтому выражение

время = string.Format("{0:t}", DateTime.UtcNow);

копирует в строку время значение текущего времени Гринвичского меридиана.

Далее, чтобы подчеркнуть, что время идет, между значением часа и значением минут зададим двоеточие (:), которое появляется в течение одной секунды и исчезает тоже на одну секунду. Для этого у нас есть внешняя булева переменная t, которая периодически меняет свое значение с true на false, потом с false на true и т.д., т.е. на противоположное: t = !t. Таким образом, при обработке,события Tick (события, когда прошел заданный интервал времени Interval, равный 1000 миллисекунд = 1 секунда) объекта timer1 в метку label1 копируется новое значени времени то с двоеточием, то без него.

Как видно, в тексте данной программы использованы переменные с русскими именами, что добавило выразительности программному коду. Мы реализовали возможность становиться форме непрозрачной при наведении курсора мыши в область метки при обработке события label1_MouseEnter вхождения курсора мыши в границы метки. Из соображений эстетики (что, конечно же, может быть подвергнуто сомнению) мы запрограммировали возврат опять к прозрачной форме при выходе курсора мыши за пределы формы, а не метки, т. е. при наступлении события Form1_MouseLeave.

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

Пример 87. Ссылка на процесс, работающий в фоновом режиме, в форме значка в области уведомлений

Название раздела для новичка кажется чрезвычайно "заумным". На самом деле