Страницы

Поиск по вопросам

понедельник, 27 мая 2019 г.

Пауза в цикле С# WindowsForms

Доброго времени суток, сообщество. Помогите начинающему программисту на С# WindowsForms. Есть задание: написать программу для подсчета
X=x1+x2+...+xn, xn=zn^3-bn+an^2/tan(Bettan).
На форме Form1 я ввожу n, и хочу чтобы для каждого xn открывалась форма для ввода z,a,b,betta. Решил сделать в цикле:
for (i = 0; i < n; i++) { Input.Show(); X[i] = Z[i] * Z[i] * Z[i] - B[i] + (A[i] * A[i]) / Math.Tan(Betta[i]); }
Но цикл открывает сразу n форм, это не удобно. Паузу в цикле я тоже реализовать не смог. Вопрос: "Как мне сделать так чтобы формы открывались по одной? Или может подскажите, как сделать удобный ввод данных другим способом?" Заранее спасибо всем кто откликнется.


Ответ

Для решения вашей задачи и ввода значений z, a, b, betta в цикле по очереди вы можете использовать (почти) любую форму, унаследованную от стандартной с полями (полем ввода), вызывая её через ShowDialog() а не через Show(). Например, если ваша форма Input унаследована от стандартной формы, то вызывайте ее так:
Input.ShowDialog();
Можно расширить функционал и обрабатывать какие-то дополнительные условия, если еще и обработать результат такого вызова, например, так:
if (Input.ShowDialog() == DialogResult.OK) {.......//Что-то делаем} else if (if (Input.ShowDialog() == DialogResult.Cancel)) { //Пользователь нажал отмену или просто закрыл форму }
Если вызывать именно ShowDialog(), то ваша форма вызывается как модальная форма, т.е. в вашем случае программа не продолжит свою работу (цикл), пока форма висит на экране и пользователь не закрыл ее тем или иным способом.
Вместо такой формы можно использовать InputBox
string input = Microsoft.VisualBasic.Interaction.InputBox("Prompt", "Title", "DefaultValue", -1, -1);
Или реализовать свою форму, как, например, предлагается сделать это тут
P.S. Я бы не использовал такой подход, разве что в целях отладки, да и то, если n достаточно невелико, а то если оно, к примеру, будет 50 или 100, то пользователь замучается вводить значения. Но это уже совсем другой вопрос.

Комментариев нет:

Отправить комментарий