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


private:
        // ========== ВАЛИДАЦИЯ ВВОДА (только цифры и точка) ==========
        System::Void NumericOnly(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
        {
            if (!Char::IsControl(e->KeyChar) && !Char::IsDigit(e->KeyChar) && e->KeyChar != '.' && e->KeyChar != ',')
            {
                e->Handled = true;
                MessageBox::Show("Вводите только числа!", "Ошибка", MessageBoxButtons::OK, MessageBoxIcon::Warning);
            }

            TextBox^ tb = dynamic_cast<TextBox^>(sender);
            if (tb != nullptr && (e->KeyChar == '.' || e->KeyChar == ',') && 
                (tb->Text->Contains(".") || tb->Text->Contains(",")))
            {
                e->Handled = true;
            }
        }

        // ========== ПЛОЩАДЬ ТРЕУГОЛЬНИКА ==========
        System::Void btnTriangle_Click(System::Object^ sender, System::EventArgs^ e)
        {
            double a, b, c;
            if (!Double::TryParse(txtA->Text, a) || !Double::TryParse(txtB->Text, b) || !Double::TryParse(txtC->Text, c) ||
                a <= 0 || b <= 0 || c <= 0)
            {
                MessageBox::Show("Введите корректные положительные стороны!", "Ошибка");
                return;
            }

            if (a + b <= c || a + c <= b || b + c <= a)
            {
                MessageBox::Show("Такие стороны не образуют треугольник!", "Ошибка");
                return;
            }

            double p = (a + b + c) / 2.0;
            double area = Math::Sqrt(p * (p - a) * (p - b) * (p - c));

            lblTriangle->Text = "Площадь = " + area.ToString("F4");
            DrawTriangle(a, b, c);   // рисуем чертёж
        }

        // ========== ПЛОЩАДЬ КРУГА ==========
        System::Void btnCircle_Click(System::Object^ sender, System::EventArgs^ e)
        {
            double r;
            if (!Double::TryParse(txtRadius->Text, r) || r <= 0)
            {
                MessageBox::Show("Введите корректный положительный радиус!", "Ошибка");
                return;
            }

            double area = Math::PI * r * r;
            lblCircle->Text = "Площадь = " + area.ToString("F4");
            DrawCircle(r);
        }

        // ========== ПЛОЩАДЬ РОМБА ==========
        System::Void btnRhombus_Click(System::Object^ sender, System::EventArgs^ e)
        {
            double side, angle;
            if (!Double::TryParse(txtRhombusSide->Text, side) || !Double::TryParse(txtRhombusAngle->Text, angle) ||
                side <= 0 || angle <= 0 || angle >= 180)
            {
                MessageBox::Show("Введите корректную сторону и угол (0 < угол < 180)!", "Ошибка");
                return;
            }

            double rad = angle * Math::PI / 180.0;
            double area = side * side * Math::Sin(rad);
            lblRhombus->Text = "Площадь = " + area.ToString("F4");
            DrawRhombus(side, angle);
        }

        // ========== РАССТОЯНИЕ МЕЖДУ ТОЧКАМИ ==========
        System::Void btnDistance_Click(System::Object^ sender, System::EventArgs^ e)
        {
            double x1, y1, x2, y2;
            if (!Double::TryParse(txtX1->Text, x1) || !Double::TryParse(txtY1->Text, y1) ||
                !Double::TryParse(txtX2->Text, x2) || !Double::TryParse(txtY2->Text, y2))
            {
                MessageBox::Show("Введите все четыре координаты!", "Ошибка");
                return;
            }

            double dist = Math::Sqrt(Math::Pow(x2 - x1, 2) + Math::Pow(y2 - y1, 2));
            lblDistance->Text = "Расстояние = " + dist.ToString("F4");
            DrawDistance(x1, y1, x2, y2);
        }