Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ProgressBar

6.0K
08 августа 2011 года
Ner
31 / / 23.11.2010
Привет!

Нажимая кнопку на одной форме появляется другая форма с элем. управ. ProgressBar, который сразу начинает работать (двигаться) без каких-либо др. действий с моей стороны, но это не получается.

 
Код:
private void progressBar_razbor_zaprosov_Click(object sender, EventArgs e)
{
for (int i = 0; i < 100; i++)
      {
         progressBar_razbor_zaprosov.Value = i;
         Thread.Sleep(10);
      }
}

Этот код работает, но только если кликнуть по ProgressBar. А др. подходящих событий вроде нет.

Пожалуйста, подскажите, что тут можно предпринять.

Спасибо.

P.S. Работаю в Visual C# 2008.
277
08 августа 2011 года
arrjj
1.7K / / 26.01.2011
Читаем про потоки. Ну или банально таймером сделать.
6.0K
08 августа 2011 года
Ner
31 / / 23.11.2010
Спасибо за ответ. С потоками я пока не готов работать. Что касается таймера…делаю так:
Код:
public Form1()
{
   InitializeComponent();

    System.Timers.Timer tmr = new System.Timers.Timer(1000);
    tmr.Enabled = true;
           
    tmr.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
}

 void tmr_Elapsed(object sender, ElapsedEventArgs e)
 {
     for (int i = 1; i < 100; i++)
     {
         progressBar1.Value = i;
     }
 }


Компилятор пишет:
Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "progressBar1" не из того потока, в котором он был создан.

Будь добр, подскажи, как это решить.
297
08 августа 2011 года
koodeer
1.2K / / 02.05.2009
Можно просто установить у прогрессбара свойство Style = ProgressBarStyle.Marquee. И ползунок на прогрессбаре будет двигаться без всякого дополнительного кода.

Но если это не устраивает, а нужно запустить именно ваш код, то прописываем его в событии Shown формы.
6.0K
08 августа 2011 года
Ner
31 / / 23.11.2010
Спасибо koodeer. Вот нашел в MSDN:

Код:
private Timer time = new Timer();

// Call this method from the constructor of the form.
private void InitializeMyTimer()
{
   // Set the interval for the timer.
   time.Interval = 250;
   // Connect the Tick event of the timer to its event handler.
   time.Tick += new EventHandler(IncreaseProgressBar);
   // Start the timer.
   time.Start();
}

private void IncreaseProgressBar(object sender, EventArgs e)
{
   // Increment the value of the ProgressBar a value of one each time.
   progressBar1.Increment(1);
   // Display the textual value of the ProgressBar in the StatusBar control's first panel.
   statusBarPanel1.Text = progressBar1.Value.ToString() + "% Completed";
   // Determine if we have completed by comparing the value of the Value property to the Maximum value.
   if (progressBar1.Value == progressBar1.Maximum)
      // Stop the timer.
      time.Stop();
}


Вроде, то что нужно, но вот с Tick (time.Tick) не могу разобраться (в какие-то дебри уводит, а может сам увожусь туда...). Не подкинешь мыслишку?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог