Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
174 / 73 / 30
Регистрация: 20.11.2013
Сообщений: 358
1

ProgressBar не заполняется

20.02.2014, 15:35. Показов 1588. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На форме имеем: кнопку, заполненный Items элемент CheckedListBox и progressBar, который должен отобразить процесс работы блока программы при пробегании по каждому Item элемента CheckedListBox. Т.к. выделенные элементы в CheckedListBox имеют конечное число, то логично отобразить процесс работы через progressBar поэлементно.
При нажатии на кнопку хотелось чтобы происходило:
1. progressBar.Visible = true;
2. при окончании расчета по i элементу progressBar переотобразился
3. по окончании роботы цикла по элементам CheckedListBox, progressBar.Visible = false;
Что сделано:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void btnInExcel_Click(object sender, EventArgs e)
{
    if (chkListBoxTables.CheckedItems.Count > 0)
    {
        progressBar1.Step = 1;
        progressBar1.Maximum = chkListBoxTables.CheckedItems.Count;
        progressBar1.Visible = true;
        this.Cursor = System.Windows.Forms.Cursors.WaitCursor;
        foreach (object itemChecked in chkListBoxTables.CheckedItems)
        {
            ..............
            ..............
            progressBar1.PerformStep();
        }
        progressBar1.Value = progressBar1.Maximum;
        this.Cursor = System.Windows.Forms.Cursors.Default;
        progressBar1.Visible = false;
    }
}
Но progressBar1 и не успевает отобразиться. И это понятно поток одиночный и ему не дают времени на переотрисовку.
Причем при первом запуске все прорисовывается замечательно, а при повторном на середине застревает и дорисовывается по окончанию процедуры...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2014, 15:35
Ответы с готовыми решениями:

Не заполняется ProgressBar
Добрый день, Интересует такой, вроде, не сложный вопрос. Есть в коде ProgressBar. С...

ProgressBar не заполняется
нужно, чтобы в процессе работы приложения progress bar полностью заполнялся, обнулялся и заново...

ProgressBar заполняется наполовину
Почему progressbar заполняется на половину private void button1_Click(object sender, EventArgs...

Не заполняется полностью progressbar
Добрый день в вузе начали изучать C# и столкнулся с проблемой. По лабораторной надо создать...

3
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
20.02.2014, 18:35 2
По первых - если процедура запускается несколько раз, то нужно перед началом в PB выставлять Value на 0.
Во вторых - конечно же будут проблемы с прорисовкой, так как обычно никто не выполняет в основном потоке сложных и длительных вычислений. Для этого создается дополнительный поток, а результат выполнения передается ProgressBar посредством Invoke.

Хотя бы Application.DoEvents() выполнял после каждой итерации.
0
174 / 73 / 30
Регистрация: 20.11.2013
Сообщений: 358
21.02.2014, 08:04  [ТС] 3
и Value установил и Application.DoEvents() поставил, разницы ни какой...
Если с потоками проблема проблема, то почему тогда при первом проходе перерисовка происходит правильно, а при последующих тормозит???
0
Си-решеточник
140 / 134 / 60
Регистрация: 07.02.2011
Сообщений: 669
21.02.2014, 13:52 4
Цитата Сообщение от Jo-Ni-K Посмотреть сообщение
и Application.DoEvents() поставил
А это как-то странно... Скинул бы весь проект - я б посмотрел.

Цитата Сообщение от Jo-Ni-K Посмотреть сообщение
то почему тогда при первом проходе перерисовка происходит правильно, а при последующих тормозит???
Черт его знает - сложно предсказать поведение GUI, если с его прорисовкой в потоке происходит что-то ресурсоёмкое.
0
21.02.2014, 13:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2014, 13:52
Помогаю со студенческими работами здесь

ProgressBar не заполняется до конца
Здравствуйте, при работе с прогресс баром обнаружил что при присваивании значению value...

Почему ProgressBar заполняется не полностью?
Всем привет ! Есть примерно такой код void __fastcall TForm1::Button1Click(TObject *Sender) {...

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

Таблица заполняется на одних компьютерах и не заполняется на других
Всем доброго дня. Столкнулся с довольно странной проблемой. Довольно долго пользуюсь базой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru