Загрузка данных
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);
}