Путь разработчика    

Как сделать секундомер в C#


Эта программа представляет собой простой секундомер. Когда вы нажимаете кнопку «Пуск», программа меняет заголовок кнопки на «Стоп» и запускает Timer. По мере запуска секундомера Timer программа отображает прошедшее время. Нажмите кнопку «Стоп», чтобы остановить Timer.

Этот пример почти тривиален, но на самом деле возникает несколько интересных проблем.

В следующем коде показан обработчик события Click кнопки.

Python

Этот код сначала переключает свойство Enable компонента Timer компонента, поэтому он запускается, если он остановлен и наоборот.

Далее код устанавливает свойство кнопки Text кнопки. Если Timer включен, тогда выполняется Timer, поэтому свойство Text кнопки должно быть «Стоп». Если Timer отключен, то Timer не работает, поэтому свойство Text кнопки должно быть «Start». (Обычно я не использую оператор?: потому что это сбив с толку, но в этом случае он сокращает код, и это то, что каждый программист на C# должен знать, как использовать, даже если вы его не используете.)

Наконец, этот код записывает текущее время в переменной StartTime.

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

Python

Этот код получает прошедшее время, так как секундомер запускается путем вычитания времени начала с текущего времени.

Истекшая переменная TimeSpan имеет Days, Часы, Минуты, Секунды , и Milliseconds, чтобы узнать, сколько времени прошло. Каждое из этих значений не учитывает значения более высокого уровня. Например, если прошло 1 час и 10 минут, свойство Hour равно 1, а свойство Minutes равно 10. Свойство Minutes not 70 для представления всего прошедшего времени в минутах.

Класс TimeSpan также имеет TotalDays, TotalHours и аналогичные свойства для представления времени в одной единице. В этом примере TotalMinutes будет равным 70. Этот пример не использует свойства Total.

Если количество прошедших дней составляет не менее 1, код добавляет количество дней к переменной text.

Затем код преобразует число миллисекунд в десятые доли секунды. Это одно из мест, где этот пример немного сложнее. Выражение прошло. Миллисекунды / 100 обрезает результат. Например, если число миллисекунд равно 199, этот код обрезает результат на 1 десятую секунды.

Однако вы, вероятно, захотите округлить это до 2 десятых секунды. Вы можете сделать это с помощью дополнительного кода, но что произойдет, если число миллисекунд равно 999? Тогда вы обойдете это до 10 десятых секунды. Это означало бы, что вам нужно добавить еще 1 секунду к числу прошедших секунд. Но тогда, если количество прошедших секунд равно 59? Затем вам нужно будет добавить минута к количеству прошедших минут.

Вероятно, вы можете видеть, куда это направляется. Вам понадобятся специальные случаи, чтобы добавить дополнительные секунды, минуты, часы и дни. Обработка всех этих особых случаев делает код намного дольше и труднее читать и отлаживать. Этот секундомер просто обрезает число десятых. Результат может быть отключен на 0,05 секунды. Это всего лишь 1/20 секунды, и прошедшее время сокращается на эту сумму в течение небольшого промежутка времени, поэтому я хочу жить с ним, чтобы упростить код.

Фактически, вы можете сделать код секундомера еще проще, просто отображая значение elapsed.ToString (). К сожалению, это показывает прошедшее время в формате 1.02: 03: 04.0050000. Это дает необоснованное впечатление о точности времени.

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

Чтобы сделать синтаксический анализ этого значения еще более сложным, время не соответствует согласованному формату. Например, оно не включает число дней этого числа равно 0. Оно также не включает миллисекунды, если они оказались равными 0.

Другой подход доступен в Visual Studio 2010 и более поздних версиях. В более ранних версиях метод TimeSpan класса TimeSpan не принимает никаких параметров и просто дает результат, аналогичный 1.02: 03: 04.0050000. В Visual Studio 2010 и более поздних версиях метод ToString может принимать строку форматирования. Строки стандартного формата отображают миллисекунды не менее 3-х цифр. Вы можете использовать строку пользовательского формата, например ts.ToString (@ "dd \: hh \: mm \: ss \ .f"), но тогда результат не распознается локалью. Если вам нужен секундомер для запуска в других странах, вам нужно будет определить страну и соответствующим образом скорректировать формат. По крайней мере, ToString (), а стандартные форматы, такие как ToString ("g"), являются языковыми, поэтому вам не нужно беспокоиться о стране.

Источник: http://csharphelper.com/blog/2016/12/make-a-stopwatch-in-c/



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Перезапустите диспетчер очереди печати в C#

Время от времени мой компьютер запутывается и думает, что принтер отключен. Это не так уж плохо, за исключением того, что Windows не предоставляет простой...

15 12 2019 21:19:34

События флеш-кликов в C#

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

14 12 2019 4:46:53

Бухгалтерский и налоговый учет в 1С:Бухгалтерии 8 (С.Харитонов)

В пособии " Бухгалтерский и налоговый учет в 1 С: Бухгалтерии 8" рассматривается технология ведения бухгалтерского и налогового учета в программе "1 С: Бухгалте...

13 12 2019 12:51:38

Выделение полигонов и полилиний в программе WPF с использованием C#

WPF позволяет вам делать всевозможные интересные вещи, которые намного сложнее в приложениях Windows Forms. Однако иногда, как в этом примере, это делает п...

12 12 2019 23:41:57

Использование веб-браузера в Python

Модуль webbrowser предоставляет интерфейс высокого уровня, позволяющий пользователям просматривать веб-документы. В большинстве случаев простое вызов функц...

11 12 2019 22:14:52

Сделайте движущийся фон в C#

В этом примере отображается текст с движущимся цветовым градиентом. Следующий ShadeRect метод содержит наиболее интересный код программы. Этот метод заполн...

10 12 2019 22:20:25

Почему я получаю NoClassDefFoundError в Java?

Определение класса можно запросить во время вызова метода или при создании нового экземпляра с использованием нового выражения. NoClassDefFoundError означа...

09 12 2019 13:30:17

Преобразование между корпусом Паскаля, верблюжьим футляром и правильным корпусом в C#

В этом примере используются методы расширения строк для преобразования строк между корпусом Pascal, верблюжьим футляром и правильным случаем. В случае Pasc...

08 12 2019 5:11:50

Переопределение WndProc, чтобы увидеть, когда пользователь нажимает любой элемент управления на форме в C#

Метод WndProc формы обрабатывает сообщения, отправленные в форму операционной системой Windows. Это чрезвычайно важный метод, который позволяет формам пере...

07 12 2019 19:46:24

Отправлять распечатку непосредственно на конкретный принтер в C#

Код устанавливает имя принтера, а затем вызывает метод PrintDocument объекта Print для немедленной отправки распечатки на этот принтер. Источник: http://cs...

06 12 2019 7:20:11

Случайный цвет для прокладки Аполлония в C#

Этот пример похож на пример Нарисуйте прокладку Аполлония в C# < / a> за исключением того, что он заполняет круги, которые он рисует со случайными цветами....

05 12 2019 0:44:45

Рисование, перемещение и удаление сегментов линии в C#

В этом примере показано, как сделать программу рисования, которая позволяет рисовать, перемещать и удалять сегменты линии. Он основан на примере Нарисуйте...

04 12 2019 5:11:10

JavaScript. Подробное руководство (Дэвид Флэнаган)

Пятое издание бестселлера "Javascript. Подробное руководство" полностью обновлено. Рассматриваются взаимодействие с протоколом HTTP и применение технологии...

03 12 2019 22:11:16

Нарисуйте пунктирные линии с разными стилями в C#

Чтобы нарисовать пунктирные линии, создайте новый Pen и установите его свойство DashStyle, чтобы указать стиль тире, который вы хотите. Например, следующий...

02 12 2019 11:24:33

Список всех файлов в папке в Java

Как читать все .txt-файлы в папке Подсчет количества файлов в каталоге с помощью Java Источник: http://net-informations.com/Java/files/folder.htm...

01 12 2019 8:45:13

Процедурные языки программирования

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

30 11 2019 11:36:16


Parse error: syntax error, unexpected ',' in /home/users/9/9161484547/domains/flash-mx.ru/lessons/926.php on line 69