Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 19
.NET 4.x

Отключить кнопку на время работы цикла foreach

24.12.2015, 08:07. Показов 2038. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемы программисты, помогите решить задачу:

Надо отключить кнопку на время работы цикла foreach
Пробовал так не получилось:

C#
1
2
3
4
5
6
7
8
9
private void button1_Click(object sender, EventArgs e)
{
button1.enable=false;
foreach ()
{
    //
}
button.enable =true;
}
Целью являестся искючить нажатие кнопки ЮЗЕРОМ на время работы цикла
Или может есть ещё какие-нибудь варианты скрыть или отключить?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2015, 08:07
Ответы с готовыми решениями:

Остановка работы цикла на которое время
Здравствуйте всем! У меня возникли сложности в написании программы для гравера. Проблема заключается в том, что вызвав...

При нажатии на кнопку ,с помощью цикла Foreach на начале каждого слова добавить случайное число
При нажатии на кнопку ,с помощью цикла Foreach на начале каждого слова добавить случайное число.

Отключить кнопку Button во время анимации
Суть программы, нужно нажать на кнопку Button, дальше запуститься анимация в компоненте Image ( когда идет анимация, надо что бы кнопка...

23
 Аватар для HectorPrima
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
24.12.2015, 08:38
И как ты скомпилировал если свойства такого нет?
Есть Enabled
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 19
24.12.2015, 08:59  [ТС]
Не обращай внимание просто не правильно написал: Enabled = false/true
Лучше помоги с решением вопроса. Спасибо
0
 Аватар для HectorPrima
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
24.12.2015, 09:03
А чем помочь то?
Кнопка через свойство Enabled отключается и становится неактивной.
Или у вас нестандартный класс кнопки?
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 19
24.12.2015, 09:09  [ТС]
Всё правильно она становится не активной. Надо после того как цикл закончится кнопка снова стала активной
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
24.12.2015, 09:25
Цитата Сообщение от AndreySV1985 Посмотреть сообщение
Надо после того как цикл закончится кнопка снова стала активной
Ну так и напиши button1.Enabled = true;, а если не уверен, что кнопка называется button1, пиши
(sender as Button).Enabled = false/true
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 19
24.12.2015, 12:44  [ТС]
Может я что-то не так делаю?)))

C#
1
2
3
4
5
6
7
8
9
  private void button1_Click(object sender, EventArgs e)
{
button1.Enabled=false;
foreach ()
{
    //
}
(sender as Button).Enabled = true;
}
Но так вот не работатет (:
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
24.12.2015, 12:52
а внутри цикла у тебя, случайно return нет?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
24.12.2015, 12:56
AndreySV1985,
На время работы цикла кнопка и так будет недоступна пользователю.
Но в любом случае вот такая конструкция должна работать:
C#
1
2
3
4
5
6
private void button1_Click(object sender, EventArgs e)
{
    button1.Enabled = false;
    //цикл
    button1.Enabled = true;
}
0
 Аватар для HectorPrima
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
24.12.2015, 13:01
Кинь уже исходник, если он не жутко секретный...
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 19
24.12.2015, 13:26  [ТС]
Цитата Сообщение от aquaMakc Посмотреть сообщение
а внутри цикла у тебя, случайно return нет?

Нету

Добавлено через 10 минут
Цитата Сообщение от Даценд Посмотреть сообщение
На время работы цикла кнопка и так будет недоступна пользователю.
Вот как раз она доступна...

Добавлено через 4 минуты
Вот исходник:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;       
                        
            foreach (var item in checkedListBox1.CheckedItems)
            {                
                Process procPsexec = new Process();
                procPsexec.StartInfo.FileName = @"PsExec.exe";                
                procPsexec.StartInfo.Arguments = "\\\"+ item +" -s " + textBox1.Text;
                procPsexec.StartInfo.RedirectStandardInput = true;
                procPsexec.StartInfo.UseShellExecute = false;
                procPsexec.StartInfo.LoadUserProfile = true;
                procPsexec.StartInfo.RedirectStandardError = true;
                procPsexec.StartInfo.RedirectStandardOutput = true;
                //procPsexec.OutputDataReceived += new DataReceivedEventHandler(SortOutH);
                procPsexec.ErrorDataReceived += new DataReceivedEventHandler(STDError);
                procPsexec.StartInfo.RedirectStandardInput = true;
                procPsexec.Start();
                procPsexec.BeginErrorReadLine();                
            }
            button1.Enabled = true;
            
        }        
        
        public static void STDError(object sendingProcess, DataReceivedEventArgs errLine)
        {
            try
            {
                streamError = new StreamWriter(fileLog, true, Encoding.GetEncoding(1251));
                streamError.WriteLine(errLine.Data);
                //streamError.Flush();
                streamError.Close();
            }
            catch (Exception e)
            {                
                MessageBox.Show(e.Message);
            }            
        }
0
 Аватар для HectorPrima
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
24.12.2015, 13:43
Не верю я вам. Не бывает так
У всех кнопка отключается а у вас нет.
Сделайте небольшой пример программы в которой кнопка не отключается.
Без примера или полного исходника программы мы можем тут долго обсуждать "сферического коня ..."
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 19
24.12.2015, 13:49  [ТС]
Она отключается... Но как обратно эту же кнопку включить?
Исходник я выложил уже.
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
24.12.2015, 13:51
Да дело видимо в том, что форма элементарно не перерисовывается из-за повесившего ее цикла... Выполняйте длительные операции в отдельном потоке/асинхронно.
1
 Аватар для HectorPrima
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
24.12.2015, 13:54
Цитата Сообщение от EvilFromHell Посмотреть сообщение
не перерисовывается из-за повесившего ее цикла
Т.е. человек этот код написал, а проверить дебагером то что программа дошла до выполнения 21-й строки не в стостоянии?
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 19
24.12.2015, 14:01  [ТС]
А как определить повис цикл или нет? Если нажать по кнопке ещё раз, цикл запускается ещё раз...
0
 Аватар для HectorPrima
716 / 473 / 258
Регистрация: 19.12.2014
Сообщений: 1,801
24.12.2015, 14:09
Цитата Сообщение от AndreySV1985 Посмотреть сообщение
Она отключается... Но как обратно эту же кнопку включить?
Цитата Сообщение от AndreySV1985 Посмотреть сообщение
Если нажать по кнопке ещё раз, цикл запускается ещё раз...
Вы определитесь уже. Она отключается и вы не можете ее включить, или она не отключается?
Я честно, уже запутался.
Цитата Сообщение от AndreySV1985 Посмотреть сообщение
А как определить повис цикл или нет?
Дебагером. Поставьте точку остановки после цикла и посмотрите, доходит ли да туда.

Добавлено через 1 минуту
F9 на строке
C#
1
button1.Enabled = true;
Потом F5.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
24.12.2015, 14:12
AndreySV1985,
У вас же процессы в цикле.
Для ожидания основным процессом окончания работы запущенного созданного процесса используйте WaitForExit, т.е.
C#
1
procPsexec.WaitForExit();
Только нужно подумать где именно эту паузу поставить, ибо цикл.
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
24.12.2015, 14:20
Цитата Сообщение от AndreySV1985 Посмотреть сообщение
А как определить повис цикл или нет? Если нажать по кнопке ещё раз, цикл запускается ещё раз...
Значит цикл проходит так быстро, что вы не успеваете этого заметить. Иначе форма бы перестала отвечать на время его работы. Как я уже сказали я и Даценд, длительные операции не надо выполнять в том же потоке, что GUI.
Цитата Сообщение от HectorPrima Посмотреть сообщение
Т.е. человек этот код написал, а проверить дебагером то что программа дошла до выполнения 21-й строки не в стостоянии?
Ну код элементарнейший, так что в этом нет ничего удивительного

Добавлено через 5 минут
Ну и, как уже сказано, если вы хотите дожидаться окончания запущенных процессов, а не просто их запустить в цикле, то WaitForExit
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 19
24.12.2015, 14:38  [ТС]
Код действительно работает... Но надо получается дождать выполнения задачи который выполняестя в цикле и только потом сделать button1.Enabled=true; Как это сделать?

Добавлено через 11 минут
Из-за WaitForExit() задачи запускаются поочерёдно и ждут окончания предыдущей итерации (затрата времени)

Вот совет с асинхнонностью помог бы, но как его реализовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2015, 14:38
Помогаю со студенческими работами здесь

Время работы цикла
Почему время работы выводит 0? int bubblesort(int *a, int n) { int i, j; int count = 0; time_t t1 = time(NULL); ...

Слишком большое время работы для маленького цикла
Я реализую алгоритм SURF. Имеется уже заполненная матрица яркостей, где lockBitmap.Width и lockBitmap.Height - ширина и высота...

Как заставить кнопку двигаться во время работы (MFC)?
Как программно во время работы моей программы, при нажатии по какой-нибудь кнопке или циклом заставить кнопку или другой компонент...

По работе цикла foreach
Уважаемые господа! С наступающим Вас новым! Немного недопонимаю тонкостей работы цикла foreach, в чем и прошу вашей подсказки! В...

По поводу цикла foreach
Добрый день! Мой вопрос только ради интереса, я не знаю так сказать как называется буква "k" в данном коде. Дословно: Для...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru