Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по C#.doc
Скачиваний:
327
Добавлен:
08.11.2018
Размер:
5.81 Mб
Скачать
      1. Счетчик NumericUpDown

Элемент управления NumericUpDown представляет собой сочетание текстового поля и пары кнопок со стрелками для выбора значения пользователем.

Он выводит и задает отдельное числовое значение в списке вариантов фиксированных числовых значений. Пользователь может увеличивать и уменьшать число, нажимая кнопки со стрелками вверх и вниз или клавиши со стрелками ВВЕРХ и ВНИЗ, а также вводя число в области текстового поля элемента управления. При нажатии клавиши со стрелкой ВВЕРХ число увеличивается до максимума; при нажатии клавиши со стрелкой ВНИЗ число уменьшается до минимума.

Элемент управления NumericUpDown используется во многих приложениях панели управления Windows.

Выводимые значения могут быть представлены текстовом поле элемента управления в различных форматах, в том числе в шестнадцатеричном. Ключевые свойства элемента управления: Value, Maximum (значение по умолчанию – 100), Minimum (значение по умолчанию – 0), и Increment (значение по умолчанию – 1). Свойство Value устанавливает текущее значение, выбранное элементом управления. Свойство Increment задает шаг изменения значения при нажатии кнопки со стрелкой вверх или вниз. При снятии фокуса с элемента управления любые введенные данные проверяются на соответствие с минимальным и максимальным числовыми значениями. Для увеличения скорости перемещения элемента управления в зависимости от непрерывности нажатия пользователем клавиш со стрелкой вверх и вниз можно использовать свойство Accelerations.

Создание счетчика

Чтобы создать счетчик:

  1. Выберите в Панели элементов на вкладке Все формы Windows Form элемент управления NumericUpDown и добавьте его на форму.

  2. В окне Свойства элемента управления NumericUpDown установите свойства Value, Maximum, Minimum и Increment

  3. Создайте двойным щелчком по элементу управления DomainUpDown обработчик события смены элемента списка, например:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)

{ float n=float.Parse(numericUpDown1.Value.ToString());

glob.frm_child.Font = new Font("Sans Serif", n);

}

Определение формата элемента управления NumericUpDown в Windows Forms

Существует возможность настройки отображения значений в элементе управления Windows Forms NumericUpDown. Свойство DecimalPlaces определяет количество знаков после десятичной запятой, по умолчанию используется нулевое значение. Свойство ThousandsSeparator определяет, будет ли вставлен разделитель между каждыми тремя десятичными знаками; по умолчанию используется значение false. В том случае, если свойству Hexadecimal присвоено значение true, этот элемент управления может отображать значения в шестнадцатеричном формате вместо десятичного; по умолчанию используется значение false.

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

      1. Индикатор процесса ProgressBar

Элемент управления форм ProgressBar (Windows Forms) показывает, на какой стадии находится выполняемое действие, что выражается в соответствующем числе прямоугольников, расположенных на горизонтальной шкале.

Завершение действия характеризуется заполненной шкалой. Индикаторы хода работы обычно используются, чтобы показать пользователю время, оставшееся до завершения длительного действия, например при загрузке большого файла.

Установка значения, отображаемого c помощью элемента управления ProgressBar в Windows Forms

.NET Framework позволяет отображать заданное значение в элементе управления ProgressBar несколькими способами. Выбор способа зависит от поставленной задачи или проблемы, которую требуется решить. В следующей таблице показаны доступные для выбора подходы.

Подход

Описание

Задайте значение элемента управления ProgressBar напрямую.

Этот подход используется в задачах, когда известно точное количество используемых элементов, например при чтении записей из источника данных. Помимо этого, данный подход можно использовать и в том случае, если нужно задать значение один или два раза. Наконец, данный подход можно использовать, если требуется уменьшить значение, отображаемое индикатором выполнения.

Увеличьте отображаемое значение элемента управления ProgressBar на фиксированную величину.

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

Увеличьте отображаемое значение элемента управления ProgressBar на переменную величину.

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

Самый прямой способ задать значение, отображаемое индикатором выполнения, — задать значение свойства Value. Это можно сделать в режиме разработки, а также во время выполнения.

Чтобы задать значение элемента управления ProgressBar напрямую

  1. Задайте значения Minimum и Maximum элемента управления ProgressBar.

  2. В коде задайте для свойства Value элемента управления целочисленное значение, которое находится между указанными минимумом и максимумом.

Примечание. Если задать значение свойства Value, которое выходит за рамки диапазона, установленного свойствами Minimum и Maximum, элемент управления создает исключение ArgumentException.

В следующем примере кода показано, как задать значение элемента управления ProgressBar напрямую. С помощью кода последовательно в текстовом многострочном поле textBox1 создается список файлов из папки Мои документы. Каждый раз при записи имени очередного файла в текстовое поле обновляются индикатор выполнения и его метка. Для данного примера требуется присутствие на форме элемента управления textBox и элемента управления ProgressBar.

private void toolStripMenuItem6_Click(object sender, EventArgs e)

{ int i;

DirectoryInfo Dir = new DirectoryInfo(@"C:\Мои документы");

FileInfo[] F1 = new FileInfo[100];

F1=Dir.GetFiles();

string[] Ln = new string[100];

for (i = 0; i < F1.Count(); i++)

{

Ln[i] = F1[i].Name;

progressBar1.Value = i;

}

progressBar1.Value = 100;

textBox1.Lines = Ln;

}

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

Чтобы увеличить отображаемое значение индикатора выполнения на фиксированную величину

  1. Задайте значения Minimum и Maximum элемента управления ProgressBar.

  2. В качестве значения свойства Step задайте целое число, представляющее величину, на которую следует увеличить отображаемое значение индикатора выполнения.

  3. Вызовите метод PerformStep для изменения отображаемого значения на величину, заданную в свойстве Step.

В следующем примере кода показано, как с помощью индикатора выполнения отобразить течение времен за промежуток20секунд с шагом 2 секунды.

В этом примере требуется, чтобы форма содержала элемент управления Timer и элемент управления ProgressBar.

В окне Свойства для элемента управления Timer установите свойства: Interval=2000; Enabled=false (таймер не запущен).

В окне Свойства для элемента управления ProgressBar установите свойства: Minimum=0; Maximum=10; Step=1.

Пропишите функцию изменения состояния элемента управления ProgressBar через каждые 2 сек на 1 прямоугольник.

private void timer2_Tick(object sender, EventArgs e)

{ if (ProgressBar1.Value < ProgressBar1.Maximum)

ProgressBar1.PerformStep();

else {timer2.Enabled=false; progressBar1.Value=0;}

}

Пропишите функцию запуска таймера.

private void toolStripMenuItem6_Click(object sender, EventArgs e)

{ timer2.Enabled = true;

}

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

Чтобы увеличить отображаемое значение индикатора выполнения на переменную величину

  1. Задайте значения Minimum и Maximum элемента управления ProgressBar.

  2. Вызовите метод Increment для изменения отображаемого значения на указанную величину.

В следующем примере кода создаются три числа из диапазона [3;8] и индикатором показывается, как изменяется значение переменной S (S=0 изначально), если к ней последовательно прибавлять созданные числа.

В этом примере требуется, чтобы форма содержала элемент управления Label, элемент управления Timer и элемент управления ProgressBar.

Объявите глобальные переменные:

public static class loc

{ public static Color cl;

public static int[] y=new int[3];

public static int k,S=0;

}

Пропишите функцию изменения состояния элемента управления ProgressBar:

private void timer3_Tick(object sender, EventArgs e)

{ if (loc.k < 3)

{ if (loc.k >0) label4.Text = label4.Text + "+";

label4.Text = label4.Text + loc.y[loc.k].ToString();

progressBar2.Increment(loc.y[loc.k]);

loc.k++;

}

else

{ timer3.Enabled = false;

label4.Text = label4.Text + "="+loc.S.ToString();

};

}.

Пропишите функцию запуска таймера.

private void toolStripMenuItem6_Click(object sender, EventArgs e)

{ loc.k = 0;

timer3.Enabled = true;

Random x = new Random();

for (i = 0; i < 3; i++)

{ loc.y[i] = x.Next(6) + 3;

loc.S = loc.S + loc.y[i];

};

progressBar2.Maximum = loc.S; label4.Text = "S=";

}

Примечание. Представленные выше варианты кода не являются единственными.

Пример. Создадим репетитор по работе с клавиатурой.

При нажатии кнопки «Новый текст» в поле Текст должен появляться текст из нескольких слов и запускаться таймер. По истечении времени, указанном в поле NumericUpDown, производится подсчет верных символов, введенным пользователем в текстовое поле.

Число слов должно генерироваться по принципу: 1-3 слова на каждые 5 сек.

Число символов в слове должно генерироваться по принципу: 3-6 символа на 1 слово.

По истечении времени текстовое поле блокируется от ввода данных.

Решение.

    1. Создадим ряд вспомогательных переменных:

namespace Metodichka

{ public partial class Form11 : Form

{

// время, индикатор процесса, время процесса

int t = 5,ind=0,tp=0;

// начальное время процесса

DateTime t0;

// датчик случайных чисел

Random r = new Random();

// число слов

int n = 2;

}

}

    1. Создадим функцию генерирования слов в зависимости от установленного времени:

private string word(object sender, EventArgs e)

{ string s="";

// d – длина слова, cod – код символа

int i, j, cod, d;

for (i = 0; i <= n; i++)

{ d=r.Next(4,7);

for (j = 0; j < d; j++)

{ cod = r.Next(1072, 1103);

s = s + Char.ConvertFromUtf32(cod);

}

s = s + " ";

}

return s;

}

    1. В обработчике загрузке формы пропишем начальные данные:

private void Form11_Load(object sender, EventArgs e)

{

// Системное время, отображаемое в строке состояния

toolStripStatusLabel1.Text = "Время: " + DateTime.Now.ToLongTimeString();

}

    1. В обработчике изменения времени в счетчике NumericUpDown пропишем сохранение значения в переменной длины процесса t:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)

{ t = Convert.ToInt16(numericUpDown1.Value);

}

    1. Создадим функцию, осуществляющую проверку ответа, вводимого пользователем:

private void proverka(object sender, EventArgs e)

{

// k – число верных символов, min – длина проверяемой строки

int k = 0,min=0, i;

if (label2.Text.Length < textBox1.Text.Length) min = label2.Text.Length;

else min = textBox1.Text.Length;

for (i = 0; i < min; i++)

if (label2.Text[i] == textBox1.Text[i]) k++;

int pr=k*100/label2.Text.Length;

label4.Text = "Верных символов: " + k.ToString() + " - " + pr.ToString()+"%";

}

    1. В обработчике нажатия кнопки «Новый текст» пропишем начальные параметры процесса:

private void toolStripButton1_Click(object sender, EventArgs e)

{

// фиксируем время начала процесса

t0 = Convert.ToDateTime(DateTime.Now);

//рассчитываем число слов

n = t / 5 * 2;

// очищаем текстовое поле

textBox1.Text = "";

// генерируем текст

label2.Text = word(sender, e);

//переводим курсор в текстовое поле

textBox1.Focus();

//включаем индикатор процесса

ind = 1;

//делаем доступным для ввода текстовое поле

textBox1.Enabled = true;

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

toolStripProgressBar1.Value = 0;

//задаем максимальное значение индикатора процесса в строке состояния

toolStripProgressBar1.Maximum = t;

// можно задать единое количество шагов

// toolStripProgressBar1.Step = t / 5;

}

    1. В обработчике работы таймера пропишем код:

private void timer1_Tick(object sender, EventArgs e)

{ //если процесс запущен, то меняем параметры процесса

if (ind==1)

{

//фиксируем текущее значение времени процесса

tp=(Convert.ToDateTime(DateTime.Now) - t0).Seconds;

//отображаем значение времени процесса в строке состояния

toolStripStatusLabel2.Text = "Процесс: "+tp.ToString();

//изменяем показатель индикатора процесса в строке состояния

toolStripProgressBar1.PerformStep();

}

// в строке состояния отображаем системное время

toolStripStatusLabel1.Text = "Время: " + DateTime.Now.ToLongTimeString();

//если время процесса стало равным заданному в счетчике, то останавливаем процесс

if (tp >= t)

{//останавливаем процесс

ind = 0;

//делаем недоступным для ввода текстовое поле

textBox1.Enabled = false;

//запускаем функцию проверки результата

proverka(sender, e);

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

tp = 0;

}}