Загрузка данных


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);
        }
    }
}