Конфликтуют label4.Text = label4.Text.Remove(0); и label4.Text += $"{n.ToString()}, ";
При нажатии на кнопку выдаёт числа в label, кратные какому-то числу (задаётся).
Если нужно второй раз вывести эти числа, нужно, чтобы сначала label очистился (т.к. в выводе стоит +=), а только потом выводил новое решение с другими числами.
По отдельности
label4.Text = label4.Text.Remove(0);
и
label4.Text += $"{n.ToString()}, ";
работают.
А вместе не хотят. Что я делаю не так?
{
int n = Convert.ToInt32(TextBox1.Text);
int m = Convert.ToInt32(TextBox2.Text);
int a = Convert.ToInt32(TextBox3.Text);
for (n = n; n <= m; n++)
{
int x = n % a;
if (x == 0)
{
label4.Text = label4.Text.Remove(0);
await Task.Delay(100);
label4.Text += $"{n.ToString()}, ";
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Вынесите очистку лейбла за цикл. Так же можно добавить обработку ошибок.
try
{
int n = int.Parse(TextBox1.Text);
int m = int.Parse(TextBox2.Text);
int a = int.Parse(TextBox3.Text);
label4.Text = "";
for (int i = n; i <= m; i++)
{
int x = i % a;
if (x == 0)
{
await Task.Delay(100); // как я понял, это для красоты здесь
label4.Text += $"{i.ToString()}, ";
}
}
}
catch (Exception ex)
{
label4.Text = ex.Message;
}
Ну или вот более оптимальный вариант
try
{
int n = int.Parse(TextBox1.Text);
int m = int.Parse(TextBox2.Text);
int a = int.Parse(TextBox3.Text);
List<int> list = new List<int>();
for (int i = n; i <= m; i++)
{
if (i % a == 0)
list.Add(i);
}
label4.Text = string.Join(", ", list);
}
catch (Exception ex)
{
label4.Text = ex.Message;
}
Или вообще вот так
try
{
int n = int.Parse(TextBox1.Text);
int m = int.Parse(TextBox2.Text);
int a = int.Parse(TextBox3.Text);
if (m > n)
label4.Text = string.Join(", ", Enumerable.Range(n, m - n).Where(i => i % a == 0));
}
catch (Exception ex)
{
label4.Text = ex.Message;
}