using System;
using System.Windows.Forms;
namespace FactorialApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// Создаём элементы управления программно
Label labelPrompt = new Label();
labelPrompt.Text = "Введите число:";
labelPrompt.Location = new System.Drawing.Point(20, 20);
labelPrompt.AutoSize = true;
TextBox textBoxNumber = new TextBox();
textBoxNumber.Location = new System.Drawing.Point(130, 17);
textBoxNumber.Width = 100;
Button buttonCalculate = new Button();
buttonCalculate.Text = "Вычислить факториал";
buttonCalculate.Location = new System.Drawing.Point(20, 60);
buttonCalculate.Width = 200;
buttonCalculate.Click += ButtonCalculate_Click;
Label labelResult = new Label();
labelResult.Name = "labelResult";
labelResult.Text = "Результат: ";
labelResult.Location = new System.Drawing.Point(20, 100);
labelResult.AutoSize = true;
// Добавляем элементы на форму
this.Controls.Add(labelPrompt);
this.Controls.Add(textBoxNumber);
this.Controls.Add(buttonCalculate);
this.Controls.Add(labelResult);
// Настройки формы
this.Text = "Калькулятор факториала";
this.Width = 300;
this.Height = 200;
this.StartPosition = FormStartPosition.CenterScreen;
// Сохраняем ссылки на элементы для использования в обработчике
this.Tag = new Control[] { textBoxNumber, labelResult };
}
private void ButtonCalculate_Click(object sender, EventArgs e)
{
// Получаем элементы из Tag
Control[] controls = (Control[])this.Tag;
TextBox textBoxNumber = (TextBox)controls[0];
Label labelResult = (Label)controls[1];
// Проверяем ввод
if (!int.TryParse(textBoxNumber.Text, out int number))
{
MessageBox.Show("Введите целое число!", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (number < 0)
{
MessageBox.Show("Факториал только для неотрицательных чисел!",
"Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (number > 20)
{
MessageBox.Show("Введите число не больше 20!",
"Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
// Вычисляем и выводим
long result = Factorial(number);
labelResult.Text = $"Результат: {number}! = {result}";
}
private long Factorial(int n)
{
if (n == 0 || n == 1)
return 1;
return n * Factorial(n - 1);
}
}
}