Установка значения, отображаемого c помощью элемента управления 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;

}

}

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

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;

}

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

private void Form11_Load(object sender, EventArgs e)

{

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

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

}

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

private void numericUpDown1_ValueChanged(object sender, EventArgs e)

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

}

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

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()+"%";

}

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

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;

}

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

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;

}}



Поделиться:


Последнее изменение этой страницы: 2017-01-20; просмотров: 468; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.93.207 (0.035 с.)